2012-11-01 5 views
2

Программа запрашивает у пользователя последовательность строк (их имя и 8-буквенное слово), печатает их имя, первую и последнюю три буквы слова, а затем печатает их слово назад. нужна помощь в цикле for для отображения строки назад.Петля для печати строки назад

#include <iostream> 

int main() { 


string FirstName; 

string LastName; 

string MiddleName; 

string Names; 

string string1; 

int len; 

int x; 

cout << "Hello. What is your first name?" << endl; 

cin >> FirstName; 

cout << FirstName << ", what is your last name?" << endl; 

cin >> LastName; 

cout << "And your middle name?" << endl; 

cin >> MiddleName; 

Names = LastName + ", " + FirstName + ", " + MiddleName; 

cout << Names << endl; 

cout << "Please enter a word with 8 or more characters (no spaces): " << endl; 

cin >> string1; 

len = string1.length(); 

    if (len < 8){ 
    cout << "Error. Please enter a word with 8 or more characters and no spaces: " << endl; 

    cin >> string1; 
} 

    else if (len >= 8){ 

    cout << "The word you entered has " << string1.length() << " characters."<<endl; 

cout << "The first three characters are " << string1.substr(0,3) << endl; 

cout << "The last three characters are " <<string1.substr(string1.length()-3,3) << endl; 

x = string1.length()-1; 

for (x = string1.length()-1; x >=0; x--){ 
cout << "Your word backwards: " << string1[x]; 
} 
} 



return 0; 
} 
+0

кажется несколько как домашнее задание, но цикл у вас возникли проблемы, подумайте о создании другой строки и не отправляйте одно и то же слово «Your word backwards:» для каждого персонажа. – Andrew

ответ

4

Вы были почти там:

cout << "Your word backwards: "; 
for (x = string1.length()-1; x >=0; x--){ 
    cout << string1[x]; 
} 

Таким образом, цикл будет печатать каждый символ в string1, но в обратном порядке, и текст "Your word backwards: " только один раз.

+0

ах, конечно. это сработало. спасибо – user1780064

+0

Хотя это не работает с многобайтовыми символами; он работает до тех пор, пока вы придерживаетесь ASCII или другого набора символов в байтах. – bames53

0

Простым способом является сохранение строки в массиве temp с обратной стороны, а затем использование этого массива temp для печати обратной строки. Например: - temp [j -] = str [i ++]; в петле. Но будьте осторожны перед этим, введите размер массива «temp» в размер исходного массива. в данном случае 'str' здесь.

+0

Извините за мой способ ответа. Это не должным образом отступом, поскольку я опубликовал его через мой мобильный – SRJ

1

Если вы хотите быть фантазии:

copy(string1.rbegin(), string1.rend(), ostream_iterator<char>(cout)); 
0

Это, вероятно, не ответ на свой вопрос, но я бы один один из них:

std::cout << "Your word backwards: " 
      << std::string(string1.rbegin(), string1.rend()) << '\n'; 

*std::copy(string1.rbegin(), string1.rend(), 
      std::ostreambuf_iterator<char>(std::cout << "Your word backwards: "))++ = '\n'; 

std::reverse(string1.begin(), string1.end()); 
std::cout << "Your word backwards: " << string1 << '\n'; 
+0

Вы забыли: 'std :: cout << std :: string (string1.rbegin(), string1.rend());' –

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