2017-01-21 2 views
-1

, поэтому этот код должен выдавать последние символы «обратного_значения» в каждом слове строки в начале слова следующим образом: cin >> О, звон колокольчики, звон колоколов, звон. О, как весело кататься на одной лошади, открытой сани. cout < < hO, glejin llsbe, glejin llsbe, glejin полностью. hO, любезное развлечение и один из них - один rseho peno ighsle.Программа не работает после выполнения всего кода

Все работает нормально, expet за то, что после окончания исполнения программа перестает работать, без какой-либо конкретной причины, которую я вижу. Я попытался набирать тестовый файл cout в конце программы, он выполняется, а затем программа снова перестает работать. Я пробовал без кода арендодателя здесь 0, но тщетно. Это бэйн моего существования, пожалуйста, помогите.

#include <iostream> 
#include <string> 
using namespace std; 
int check_if_reverse_display_overload (int, int); 
int main() 
{ 
    string dumi=""; 
    string duma=""; 

    getline (cin,dumi); 

    dumi.append(" "); 

    int reverse_display, reverse_display_overload, i=0, k=0; 

    cin>>reverse_display; 

    for (int i=0; i< dumi.length(); i++) 
    { 

     if ((dumi[i]>='A' && dumi[i]<='Z') || (dumi[i]>='a' && dumi[i]<='z') || dumi[i]=='-' || (dumi[i]>='0' && dumi[i]<='9')) 
     { 

      duma[k]=dumi[i]; 
      k++; 
     } 
     else 
     { 
      if (((dumi[i-1]>='A' && dumi[i-1]<='Z') || (dumi[i-1]>='a' && dumi[i-1]<='z') || dumi[i-1]=='-' || (dumi[i-1]>='0' && dumi[i-1]<='9')) && i!=1) 
      { 
      reverse_display_overload=check_if_reverse_display_overload(reverse_display, k); 

      for (int j=k-reverse_display_overload; j<k; j++) 
      { 
       cout<<duma[j]; 
      } 
      for (int j=0; j<k-reverse_display_overload; j++) 
      { 
       cout<<duma[j]; 
      } 

      duma=""; 
      k=0; 
      } 
      cout<<dumi[i]; 

     } 

    } 
// cout<<"bogomil rainov e pi4"; 
    return 0; 
} 

int check_if_reverse_display_overload (int reverse_display, int k) 
{ 
    if (k==0) 
    { 

     return reverse_display; 
    } 
    if(reverse_display>k) 
    { 

     return check_if_reverse_display_overload(reverse_display-k, k); 
    } 
    else 
    { 

     return reverse_display; 
    } 
} 
+0

Вы не можете просто получить доступ к пустой строке (думе). Вы вызываете неопределенное поведение. –

+0

Вы можете устранить половину своих сравнений, используя 'std :: tolower' или' std :: toupper'. –

ответ

0

Один из моих друзей помог мне найти ошибку. Он связан с этим фрагментом кода. Это связано с работой вне массива струнной думы. Хотя я до сих пор не могу понять суть этой ошибки.

if ((dumi[i]>='A' && dumi[i]<='Z') || (dumi[i]>='a' && dumi[i]<='z') || dumi[i]=='-' || (dumi[i]>='0' && dumi[i]<='9')) 
    { 

     duma[k]=dumi[i]; // the error because of this line 
     k++; 
    } 
+0

В этот момент 'duma' пуст, поэтому' duma [k] 'вне диапазона для любого' k'. Вы можете использовать 'push_back' для добавления символов в строку. –

+0

_ «Хотя я до сих пор не могу понять суть этой ошибки». Это довольно просто - вы пишете элементы, которых не существует. –