2016-04-15 3 views
-1

Я решаю проблему и застрял на последней части, что я делаю. Принимая 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; 
} 
+1

Выполнить в отладчике, и шаг за шагом через код построчно, чтобы увидеть, где он идет не так. Что-то говорит мне, что это может иметь отношение к вам, индексируя 'replace' * за пределы *. –

+0

@JoachimPileborg вы можете ввести только 5 символов в первый массив и любые 3 символа для поиска –

+0

Да, и это означает, что 'count' будет на * most *' 3', правильно? Затем в цикле замещения вы используете индекс 'j', который будет увеличиваться до' 4', что может быть за пределами. Кстати, не должен ли индекс для 'arr' подниматься до * 5 *? Это * гарантирует *, что 'replace' будет проиндексирован за пределы. –

ответ

-1
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; 

       arr[j]='\0'; 

      } 
     } 

    } 

/********************************/ 

     int i=0; 

      for (int j = 0; j < 5; j++) { 
       if (arr[j]=='\0') { 
        arr[j] = replace[i++]; 
       } 
     } 

enter image description here

+0

Я понимаю, что я делаю неправильно –

+0

Скважины кода не являются ответами, Шубхо. –

0

Вы хотите, чтобы попросить пользователя, чтобы заменить определенное количество символов, считая, сколько символов появляются в subarr.

обр вводится, subarr от:

int replacecount[3] = { 0 }; 

for (int x=0; x<6; x++) 
    for (int i=0; i<3; i++) 
     if (input[x] == from[i]) { 
      ++replacecount[i]; 
      break; 
     } 

int count = 0; 
for (int i=0; i<3; i++) 
    if (replacecount[i] > 0) 
     ++count; 

std::cout << " you can replace " << count << " characters..." << std::endl; 
char to[3]; 
for (int i=0; i<3; i++) 
    if (replacecount[i] > 0) { 
     std::cout << "enter replace character for '" << from[i] << "'" << std::endl; 
     std::cin >> to[i]; 
    } 

for (int x=0; x<6; x++) 
    for (int i=0; i<3; i++) 
     if (input[x] == from[i]) { 
      input[x] = to[i]; 
      break; 
     } 

std::cout << "replaced string is: " << input << std::endl; 
Смежные вопросы