Я решаю проблему и застрял на последней части, что я делаю. Принимая 5 символов от пользователя и сохраняя его в массиве символов, а затем введите 3 символа, чтобы проверить, имеет ли массив ваши вводимые символы.
Например:
Пользователь вводит 5 символов dagpl
.
Чем второй массив subArray
, который ищет символы из основного массива, теперь пользователь вводит 3 символа dgl
.
Результат, если найдено 3 символов. Вы хотите заменить эти 3 символа новыми символами? Итак, введите 3 новых символа замены, теперь пользователь вводит xyz
.
Окончательный массив будет заменен следующим образом: xaypz
.
Заменить символы в старом массиве
Мой код не работает нормально для замены символов, я не знаю, что я делаю неправильно.
#include<iostream>
#include<cstdlib>
using namespace std;
int main(int argc, char**argv) {
bool check = false;
char arr[6] = { '\0' };
char subarr[4] = { '\0' };
int count = 0;
cout << "Enter Characters : ";
for (int i = 0; i < 5; i++) {
cin >> arr[i];
}
cout << "Enter 3 Characters and see how many times does array has your Search Characters : ";
for (int i = 0; i < 3; i++) {
cin >> subarr[i];
}
//Sub Array
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 5; j++) {
if (subarr[i] == arr[j]) {
if (!check) {
cout << "Found characters are: ";
}
count++;
cout << subarr[i] << ",";
check = true;
}
}
}
if (check) {
cout << '\b';
cout << " ";
cout << endl;
}
if (!check) {
cout << "Sorry Nothing Found" << endl;
}
cout << "total Found : " << count << endl;
//SECTION 3
if (check) {
int n = count + 1;
char* replace = new char[n]();
cout << "You can only replace " << count << " new characters because of find operation! so enter it will be replace old array with it: ";
for (int i = 0; i < n - 1; i++) {
cin >> replace[i];
}
//Replace characters
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < 5; j++) {
if (subarr[i] == arr[j]) {
arr[j] = replace[j];
}
}
}
delete[]replace;
replace = NULL;
cout << "New Array would be: ";
for (int i = 0; i < 5; i++) {
cout << arr[i];
}
cout << endl;
}
system("pause");
return EXIT_SUCCESS;
}
Выполнить в отладчике, и шаг за шагом через код построчно, чтобы увидеть, где он идет не так. Что-то говорит мне, что это может иметь отношение к вам, индексируя 'replace' * за пределы *. –
@JoachimPileborg вы можете ввести только 5 символов в первый массив и любые 3 символа для поиска –
Да, и это означает, что 'count' будет на * most *' 3', правильно? Затем в цикле замещения вы используете индекс 'j', который будет увеличиваться до' 4', что может быть за пределами. Кстати, не должен ли индекс для 'arr' подниматься до * 5 *? Это * гарантирует *, что 'replace' будет проиндексирован за пределы. –