单循环反转字符串

时间:2019-04-08 08:09:53

标签: 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;
}

1 个答案:

答案 0 :(得分:5)

请注意,您无需初始化迭代器变量i,并且可以在for语句中声明索引,因为您无需在for循环范围之外使用此变量。此外,您还可以使用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;
}

您还可以使用内置的反向功能(请参阅description here)。该函数实际上是反转字符串本身。

int main()
{
    std::string a;

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

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

    std::cout << a << endl;
}

另一种选择是手动反转字符串(由于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;
}