2015-12-03 2 views
0

Я пытаюсь изменить слова в строке.Последнее слово в строке не реверсирует

Пример, Входной сигнал: , как XSD БФ приведет выход: са DSX FB.

Моя проблема в том, что последнее слово не отменяется.

Пример, Входной сигнал: в XSD БФ приведет выход: са DSX бф .Как вы можете видеть бф не получает обратное.

Мой код,

#include<iostream> 
#include<string> 
using namespace std; 

void RevWords(string inp); 


int main() 
{ 
    string input; 

    cout<<"Enter Sring:"<<endl; 
    getline(cin,input); 
    cout<<"Entered String:"<<input<<endl; 
    RevWords(input); 

    return 0; 
} 

void RevWords(string inp) 
{ 
    int wordEnd=0,indexS=0,indexE=0; 
    string newStr; 
    newStr=inp; 

    while(wordEnd<inp.length()) 
    { 
     if(inp[wordEnd] != ' ') 
     { 
     wordEnd++; 
     } 
     else 
     { 
     if(inp[wordEnd] == ' ' || inp[wordEnd] == '\0') 
     { 
      indexE=wordEnd-1; 
      while(indexS<wordEnd) 
      { 
       newStr[indexS]=inp[indexE]; 
       indexS++; 
       indexE--; 
      } 
      newStr[indexS]=' '; 
      indexS++; 
     } 
     wordEnd++; 
     }  
    } 
    cout<<newStr<<endl; 
} 
+4

T ry отлаживая код, это лучший способ понять, что происходит. – Motti

+0

Вы забыли задать вопрос. Ваш вопрос: «Как вы отлаживаете код на C++?» Если да, то зачем давать нам весь этот код и не сообщать нам, какой у вас отладчик? –

+3

Используйте 'std :: reverse' для каждого элемента вектора слов, почему все это? – LogicStuff

ответ

1

Вы не обрабатываем последнее слово, потому что вы перестанете прежде чем попасть туда:

while(wordEnd<inp.length()) { // When you finally get to the last letter. You will 
           // exit on the next loop iteration. 
    if(inp[wordEnd] != ' ') 

Вы должны изменить его к этому:

while(wordEnd<=inp.length()) { 
    if(wordEnd < inp.length() && inp[wordEnd] != ' ') { 
     //^ This is important so you dont go out of bounds on your string 

Here is a live example.

+0

Re: Твоя демонстрация: слова мимолетны * AndyG

+0

Большое спасибо. Да, я забыл, что длина не включает нулевой ограничитель. Для этого напоминания я благодарю Бена и БейелераСтудиоса. И я также благодарю ben за то, что он напомнил мне словоEnd LuckyAli

+0

@AndyG Это написание не грамматики;) Спасибо, хотя я ее изменю. –

Смежные вопросы