在下面的代码中我试图反转字符串没有编译时错误,但是没有显示任何内容。有什么问题?
string string1="arunachalam";
void reverseStr()
{
for(int i=string1.length();i<0;i--)
{
cout<<string1[i];
}
}
答案 0 :(得分:8)
你的循环条件i < 0
是罪魁祸首。循环立即退出,因为字符串的长度永远不会为负。替换为i >= 0
。
您还应该有i = string1.length() - 1
,因为字符串索引从零开始。因此:
for(int i = string1.length() - 1; i >= 0; i--) {
cout << string1[i];
}
答案 1 :(得分:4)
问题出在int i=string1.length()
语句中,因为索引是0,它应该是int i=string1.length() - 1
此外,你的i < 0
条件是错误的,我会让它自己解决。
答案 2 :(得分:2)
如果不依赖全局变量,则函数更有用。使用参数和返回值,例如签名:
const string& reverseStr(const string& s);
会更有用。该定义可以使用std :: string中的reverse_iterator
:
const string& reverseStr(const string& s)
{
return string(s.rbegin(), s.rend());
}
然后实际使用:
string string1="arunachalam";
cout << reverseStr(string1); // XXX: add an endl, if needed
答案 3 :(得分:1)
对不起,但应该是i> 0才能完成这项工作
答案 4 :(得分:1)
到目前为止,最干净,一个一个安全且停止条件安全的解决方案就是使用反向迭代器 - 假设它是你正在使用的std :: string。
string string1="arunachalam";
void reverseStr()
{
string::const_reverse_iterator cur;
// .rbegin() returns iterator to reverse-begin, i.e. the end ...
// operator++ on a reverse iterator does move it in the "right"
// (desired) direction.
for(cur=string1.rbegin(); cur!=string1.rend(); cur++)
cout << *cur;
}