当使用反向循环反转字符串时,null字符会发生什么

时间:2017-04-29 07:13:52

标签: c++ string loops null-character

我是C ++中字符串的新手。我只是对下面代码的工作感到困惑(用于反转字符串)。

f(N) = O(N^4)

问题是字符串的最后一个字符是空字符std:: string rev; for(int i= str.size()-1; i>=0; --i) { rev.push_back(str[i]); } std:: cout<<" Reversed= "<<rev<<endl; 。因此,当循环运行第一次迭代时,它应该在'\0'的开头放置一个空字符,还有一件事,这里字符串rev可能不会被终止,因为rev未指定为字符串的最后一个字符。

但是当我执行程序时,它运行正常。在我这么想的时候,我知道我错了。请问有人解释工作吗?我很高兴并感谢你:)

2 个答案:

答案 0 :(得分:4)

null终止符实际上不被视为std::string的一部分。它只会在您拨打c_str()时发挥作用。因此size()length()不包含终止符。事实上,你可以将空字符放在std::string的中间,除c_str()外,一切都仍然有效(如果你的字符串可能包含空值,你应该使用data()和{{1 }})。

答案 1 :(得分:1)

&#39; / 0&#39;运算符是自动添加的,因此您只能循环直到&#39; / 0&#39;之前的字符。它总是在那里,所以你没有看到任何变化。