2014-10-29 2 views
-5

Задача состоит в том, чтобы прочитать строку и заменить первый символ последним. Вот мой код: я не понимаю, почему imput совпадает с выходом. Большое спасибо за вашу помощь.Не могли бы вы рассказать мне, почему моя программа не работает?

#include <iostream> 
#include <string> 

using namespace std; 

int main() 
{ 
    cout << "Enter string: " << endl; 
    string str; 
    cin >> str; 

    char first = str[0]; 
    int lastChar = str.length() -1; 
    char last = str[lastChar]; 
    char temp; 

    temp = first; 
    first = last; 
    last = temp; 

    cout << last << endl; 




    return 0; 
} 
+0

'if (! Str.empty()) std :: swap (str.front(), str.back());' –

+5

Вы выводите только 1 символ, поэтому я не понимаю, почему вывод тот же как вход для вас. –

ответ

0

Проблема заключается в том что вы не замены символов в строке, но поменять местами содержимое только first и last. Затем вы выводите только содержимое last, которое является единственным символом. Есть несколько способов приблизиться к этому. Один из способов - поменять символы в строке прямо так.

char temp = str[0]; 
str[0] = str[lastChar]; 
str[lastChar] = temp; 

В качестве альтернативы вы можете также сделать это с std::string::front() и std::string::back(), если вы используете C++ 11.

char temp = str.front(); 
str.front() = str.back(); 
str.back() = temp; 

Другим и более идиоматических и предпочтительный способ заключается в использовании std::swap.

std::swap(str[0], str[str.size() - 1]) 

После того, как вы закончили подкачки вы можете вывести всю строку с

cout << str << endl; 

Как примечание стороны, я рекомендую вам не использовать using namespace std;, как она тянет все содержимое std в сферу заявление using. Это может вызвать столкновения имен и другие неприятные побочные эффекты, которые могут испортить ваш день.

1

Вы копируете символы в первую и последнюю переменные, а затем заменяете их, а не заменяете элементы строки.

temp = str[0]; 
str[0] = str[lastChar]; 
str[lastChar] = temp; 
1

Прежде всего, ваш единственный вывод 1 персонажа, как сказал Нейл Кирк. как вы ожидаете получить всю строку?

Также first содержит последнее значение строки, а last содержит первое значение строки, поэтому попробуйте включить эти значения в проблему, и вы получите ответ.

1

Вы можете сделать что-то вроде этого: -

string str;  //string on which replacement would take place. 
char temp; 
int lastIndex = str.length() - 1; 
temp = str[0]; 
str[0] = str[lastIndex]; 
str[lastIndex] = temp;