我是 C++ 中字符串的新手。我只是对下面代码的工作感到困惑(用于反转字符串)。
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
可能不是空字符终止的因为 '\0'
没有指定为字符串的最后一个字符。
但是当我执行该程序时,它工作正常。我知道我在思考这一切时错了。谁能解释一下工作原理?我将很高兴并感谢你 :)
最佳答案
空终止符实际上不被视为 std::string
的一部分。它仅在您调用 c_str()
时发挥作用。所以 size()
和 length()
不包含终止符。事实上,您可以将空字符放入 std::string
的中间,一切仍然有效,除了 c_str()
(如果您的字符串可能包含空值,您应该使用 data()
和 size()
)。
关于c++ - 使用反向循环反转字符串时空字符会发生什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43692867/