1

我是 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'它没有被分配为字符串的最后一个字符。

但是当我执行程序时,它工作正常。我知道我在思考这一切时错了。谁能解释一下工作?我会很高兴并感谢你:)

4

2 回答 2

4

空终止符实际上不被视为 a 的一部分std::string。它仅在您调用时起作用c_str()。所以size()并且length()不包括终止符。事实上,您可以将空字符放在 a 的中间,std::string一切仍然有效,除了c_str()(如果您的字符串可能包含空值,您应该使用data()and size())。

于 2017-04-29T07:15:36.947 回答
1

'/0' 运算符是自动添加的,因此您只循环到 '/0' 之前的字符。它基本上总是在那里,所以你看不到任何变化。

于 2017-04-29T07:18:37.620 回答