单循环反转字符串

-1 c++

我只想使用单个循环来反转字符串。我该怎么做?我尝试了一种简单的方法,但没有得到我想要的输出。

#include<iostream>
using namespace std;

int main()
{
    int i;
    char a[10];

    cout << " Enter String :";
    cin >> a;

    for(a[i] = '\0'; i > 0; i--)
    {   
        cout << "Reverse string is" << a[i];
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Mic*_*oek 5

请注意,您无需初始化迭代器变量i,并且可以在for语句中声明索引,因为您无需在for循环范围之外使用此变量。此外,您还可以使用a std::string而不是char数组,这还允许长度超过您指定的十个字符的字符串。

编辑:我假设您可以使用C ++ 17或更高版本。从C ++ 17开始,他们终于添加了非成员版本std::size(由于我阅读了Scott Meyers的《有效的现代c ++》一书,所以我更喜欢与成员相关的版本)。如果由于某种原因不能使用此函数,则可以将其替换为字符串成员函数length,即a.length()

如果只想打印字符串的反面,则可以使用如下所示的内容

int main()
{
    string a;

    cout << "Enter String: ";
    cin >> a;

    for (int idx = size(a) - 1; idx >= 0; --idx)
      cout << a[idx];
    cout << endl;
}
Run Code Online (Sandbox Code Playgroud)

您也可以使用内置的反向功能(请参见此处的说明)。该函数实际上是反转字符串本身。

int main()
{
    std::string a;

    std::cout << "Enter String: ";
    std::cin >> a;

    std::reverse(std::begin(a), std::end(a));

    std::cout << a << endl;
}
Run Code Online (Sandbox Code Playgroud)

另一个选择是手动反转字符串(这没有意义,因为它std::reverse是标准库的一部分,但作为学习练习,它可能会有所帮助)。请注意,我们只迭代字符串大小的一半,否则每个元素将交换两次,从而得到原始字符串。

int main()
{
  string a;

  cout << "Enter String: ";
  cin >> a;

  for (size_t idx = 0, n = size(a); idx < n / 2; ++idx)
    swap(a[idx], a[n - idx - 1]);
  cout << a << endl;
}
Run Code Online (Sandbox Code Playgroud)