Не могу понять, куда пропадает массив str2. Он просто забивается после исполнения функции strcopy(&str1, &str3, k1), хотя он даже там не используется
int kolsimv(char str[], int n) {
bool flag = true;
int k;
k = strlen(str);
return k;
}
char vivod(char str[], int N, int M) {
for (int i = N; i < M + N; ++i) {
cout << str[i];
}
cout << endl;
return 0;
}
void strcopy(char** str1, char** str3, int k1) {
for (int i = 0; i < k1; ++i) {
str3[i] = str1[i];
}
}
void sort(char str[], int k1) {
int* kod = new int[k1];
for (int i = 0; i < k1; ++i) {
kod[i] = (int)str[i];
}
for (int i = 0; i < k1; ++i) {
cout << kod[i];
}
cout << endl;
int imax = 0;
for (int i = 1; i < k1; ++i) {
if (kod[imax] < kod[i]) {
imax = i;
}
}
int param;
for (int j = 0; j < k1; j++) {
for (int i = k1 - 1; i >= j; i--) {
if (kod[i - 1] > kod[i]) {
param = kod[i - 1];
kod[i - 1] = kod[i];
kod[i] = param;
}
}
}
for (int i = 0; i < k1; ++i) {
cout << kod[i];
}
cout << endl;
for (int i = 0; i < k1; ++i) {
str[i] = wchar_t(kod[i]);
}
}
int main()
{
setlocale(LC_ALL, "Russian");
int k1;
int k2;
const int n1 = 50;
const int n2 = 50;
int n3 = 50;
int N, M;
int n4 = 200;
char str1s[999];
char str2s[999];
char* str1 = new char[n1];
``` char* str2 = new char[n2]; ```
char* str3 = new char[n3];
char str4[999];
cout << "Введите первую строку:\t";
cin >> str1;
strcpy_s(str1s, 999, str1);
cout << "Введите вторую строку:\t";
cin >> str2;
strcpy_s(str2s, 999, str2);
cout << "Введите номер начала вывода N:\t";
cin >> N;
cout << "Введите номер конца вывода M:\t";
cin >> M;
k1 = kolsimv(str1, n1);
k2 = kolsimv(str2, n2);
cout << "Количество символов в первой строке :\t" << k1 << endl;
cout << "Количество символов во второй строке :\t" << k2 << endl;
cout << "Вывод нужных символов из второй строки:\n";
vivod(str2, N, M);
``` strcopy(&str1, &str3, k1); ```
cout << "Вывод 3 строки, c добавлением в нее 1-ой:\t" << str3 << endl;
sort(str3, k1);
cout << "Вывод отсортированной по алфавиту 3 строки:\t" << str3 << endl;
strcpy_s(str4, 999, str1s);
strcat_s(str4, 999, str2s);
cout << "Вывод конкатенации 1 и 2-ой строк:\t" << str4 << endl;
int u = 0;
if (k1 > k2) {
cout << "Первая строка не является частью второй строки" << endl;
}
else {
if (strcmp(str1s, str2s) == 0) {
cout << "строки 1 и 2 совпадают";
}
else {
for (int j = 0; j < k1; ++j) {
for (int i = 0; i < k2; ++i) {
if (str1s[j] == str2s[i]) {
++u;
}
}
}
if (u == k1) {
cout << "Первая строка является частью второй" << endl;
}
else {
cout << "Первая строка не является частью второй" << endl;
}
}
}
delete[] str1;
delete[] str2;
delete[] str3;
cout << endl;
return 0;
}
Ответы (1 шт):
Автор решения: Harry
→ Ссылка
Что за ерунду вы делаете в strcopy?!
Если вы хотели копировать k символов, то это делается так:
void strcopy(char* str1, char* str3, int k1) {
for (int i = 0; i < k1; ++i) {
str3[i] = str1[i];
}
}
Хотя на самом деле для этого есть memcpy и strncpy.
Вы же попытались переписывать (читай - запарывать...) память рядом с переменной str3.