我只想使用单个循环来反转字符串。我该怎么做?我尝试了一种简单的方法,但没有得到我想要的输出。
#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;
}
答案 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;
}