如何反转字符串

时间:2016-08-13 07:19:42

标签: c++

我是编码的初学者,并且朋友给了一个项目来反转用户输入的字符串的顺序,但是当我运行这段代码时,程序只是重复打印多次输入的字符串而且我'我不确定什么是错的。

例如,我输入"hi",它只打印"hi"多次。我尝试过使用cingetlinescanf(根据朋友推荐),但无济于事......

#include <iostream>

using namespace std;

int main()
{
    char arr[5];
    getline(cin, arr);
    for(int x=4; x>=0; x--){
        cout << arr << endl;
    }
    return 0;
}

5 个答案:

答案 0 :(得分:1)

由于问题标记为C++,因此您应该使用C ++结构,例如std::stringstd::reverse。这将使代码更具可读性和可理解性。

#include <string>
#include <iostream>
#include <algorithm>

int main()
{
    std::string input;
    std::getline(std::cin, input);
    std::reverse(input.begin(), input.end());
    std::cout << input << std::endl;
    return 0;
}

答案 1 :(得分:0)

这一行错了:

cout << arr << endl;

您必须使用索引运算符[],如下所示:

cout << arr[x];

请注意,没有endl,因为它会打印新行中的每个字符。

使用arr [x]可以在索引 x 中为您提供数组的元素(或者如果您将使用字符串的字符)。请注意,C ++中的元素索引从0开始。因此第一个元素是arr [0],第二个是arr [1],依此类推。

另外,为什么要使用只有5号的C风格字符数组呢?您可以像使用C ++ std :: string一样有效,它可以用于更大的字符串:

string x;
getline(cin, x);

for (int i = x.size() - 1; i >= 0; i--)
{
    cout << x[i];
}

cout << endl;

希望这有帮助。

答案 2 :(得分:0)

当您编写cout << arr << endl;时,您将在循环的每次迭代中打印整个字符串。相反,您希望在索引x处打印字符,因此您应将其写为cout << arr[x];如果在循环内使用endl,则每个字符后面都会有一个新行。

此外,在C ++中,使用字符串库有一种更简单的方法来处理字符串。然后,您无需事先在字符串中指定字符数,如果用户需要输入超过4个字符,则会有所帮助。

#include <iostream>
#include <string>

using namespace std;

int main()
{
    string arr;
    getline(cin, arr);
    for(int x=arr.size()-1; x>=0; x--){
        cout << arr[x];
    }
    cout << endl;
    return 0;
}

答案 3 :(得分:0)

您正在发生的事情是将arr的全部内容发送至cout 5次。你想要的是反过来打印每个角色;为此,您需要在arr循环中一次只发送一个for字符:

cout << arr[x] // This sends the character at index x to cout
cout << arr    // This sends the entire array to cout

此外,您应该在 cout << endl循环之后for ;否则,您将在每个字母后打印换行符。

答案 4 :(得分:0)

使用迭代器的替代解决方案:

#include <iostream>
#include <iterator>
#include <algorithm>
#include <string>

int main()
{
   std::string input;
   getline(std::cin, input);

   for (std::string::reverse_iterator rit=input.rbegin(); rit!=input.rend(); ++rit)
   std::cout << *rit;

   return 0;
}