2016-05-13 2 views
-2

Я выполняю некоторые алгоритмы программирования, но я очень смущен getchar() этот метод. А вот вопрос требуется:У меня возникли проблемы со словами reverse

  • вход: Hello World Здесь I Come
  • выход: Давай я здесь World Hello

И я пытаюсь использовать getchar(), чтобы каждый символ, и использование строковая переменная для сбора символа. Когда приходит пробел, я использую stack, чтобы вставить текущую строковую переменную в стек, в результате чего строковая переменная равна "". Но что бы я ни пытался, вывод всегда выводит тарабарщину, и я не знаю, как это сделать.

Вот код:

#include<iostream> 
#include<stack> 

using namespace std; 

stack<string> re;// the stack 

int main() 
{ 

char a;// the char to get very single char that print 
string temp=""; 
string all=""; 

while(a=getchar()!='\n')//if enter don't come 
{ 
    if(a==(char)'32')//if the space come,push temp and reset the temp equals "" 
    { 
     re.push(temp); 
     temp="";//so that i can collect a new word without last one 
    } 
    else 
     temp+=a;//temp collects the char 

} 

while(!re.empty())//get every string from the stack 
{ 
    if(re.size()==1) 
    cout<<re.top(); 
    else 
    cout<<re.top()<<" "; 

    re.pop(); 
} 

return 0; 
} 
+0

* ', если (а == (символ) '32')' * Как это компилировать? Это не действительный литерал 'char'. –

+0

так, должен ли я использовать '' вместо этого, но это тоже не работает. Я попытался использовать строковую переменную, чтобы получить все символы, но все же бред. –

+0

Возможно, вы не решите свою проблему, но '(char) '32'' =>' ''' –

ответ

1
a = getchar() != '\n' 

a будет либо 0 или 1, в зависимости, если символ, полученный в '\n' или нет. Он может быть изменен, например, на:

a = getchar(), a != '\n' 

другая возможность может быть:

(a = getchar()) != '\n' 

Вы также не толкая последнее слово в стек. Строка all не использовалась вообще, и поэтому я ее удалил.

Другой вопрос, отметил в комментарии вопрос, был признан недействительным, если Comparision a пространство: (char)'32' не пробел, но ' ' есть.

Исправленный код (такой же, как identation вопрос):

#include<iostream> 
#include<stack> 

using namespace std; 

stack<string> re;// the stack 

int main() 
{ 
    char a;// the char to get very single char that print 
    string temp = ""; 

    while ((a = getchar()) != '\n')//if enter don't come 
    { 
     if (a == ' ')//if the space come,push temp and reset the temp equals "" 
     { 
      re.push(temp); 
      temp = "";//so that i can collect a new word without last one 
     } 
     else 
      temp += a;//temp collects the char 
    } 
    if (!temp.empty())//if last word is not empty then push it to the stack 
    { 
     re.push(temp); 
    } 

    while (!re.empty())//get every string from the stack 
    { 
     if (re.size() == 1) 
      cout << re.top(); 
     else 
      cout << re.top() << " "; 

     re.pop(); 
    } 

    return 0; 
} 
+0

спасибо большое. Какую глупую ошибку я сделал! –

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