反转C ++中的字符串

时间:2018-10-24 08:29:21

标签: c++ reverse stdstring

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

main() 
{
beginning:
    string name;
    cout << "Hey! Enter your name" << endl;
    cin >> name;
    int i = name.length() - 1;
    do
    {
        cout << name[i];
        i--;
    } while (i > -1);
    cout << " Your reverse name is " << name[i] << endl;
    cout << name[i] << " Your reverse name is " << endl;
    goto beginning;
}

enter image description here

  1. 为什么在“您的反向名称之前显示” zsuidakrA“ 是” ,尽管我的编码方式类似于cout<<" Your reverse name is "<<name[i]<<endl;
  2. 对于cout<<name[i]<<" Your reverse name is "<<endl;这一行,我 仅找到“您的反向名称是” ,但没有名称。为什么?

4 个答案:

答案 0 :(得分:6)

您首先要显示反向字符串,然后输出Your reverse name is。但是字符串永远不会反转。使用:

string reverse_name(name.rbegin(), name.rend())

创建反向字符串。

然后使用cout显示它。

仅供参考,不要使用goto s ...

答案 1 :(得分:2)

删除最后两个cout语句。 反向字符串已经由do-while循环内的cout语句打印。您可以移动

cout<<" Your reverse name is "<<endl;

如果确实需要,在do语句之前。

答案 2 :(得分:2)

您可以使用std :: reverse为您反转它:

#include <iostream>
#include <cstdlib>
#include <algorithm> // std::reverse

int main(){
    std::string name;
    while(true) {
        std::cout << "Hey! Enter your name: " << std::flush;
        std::cin >> name;
        std::cout << "Your name is: " << name << "\n";
        std::reverse(begin(name), end(name));
        std::cout << "Your reverse name is: " << name << "\n";
    }
}

答案 3 :(得分:1)

1),因为您要在cout语句之前的do while循环中打印名称[i]。

2)因为因为(i> -1)条件变为false,而i的值不等于while循环,所以i = -1,而name [-1]可能什么也不打印。