用c++中的for(auto s:string)遍历一个String字符串首尾会出现一个空格是怎么回事,怎么解决这个问题
时间: 2024-09-15 08:15:33 浏览: 64
C++-STL标准模板库中的string
在C++中,当使用`for (auto s : string)`遍历`std::string`时,实际上是将整个字符串复制给`s`,然后逐个元素迭代。由于`std::string`内部是以`'\0'`作为结束标志的,所以在最后的迭代里,`s`实际上指向的是空字符,这看起来像一个额外的空格。这种行为不是错误,而是设计的一部分,因为`for (auto &s : string)`会提供对原字符串的引用,允许修改。
如果你想避免这种情况,有两种方法:
1. 使用`std::string::begin()`和`std::string::end()`:
```cpp
for (const auto& c : string) {
std::cout << c;
}
```
这样不会创建新的临时字符串,也不会包含结束符。
2. 或者在迭代完成后输出,而不是每次迭代都输出:
```cpp
std::string str = "Hello";
for (auto it = str.begin(); it != str.end(); ++it) {
if (*it != '\0') {
std::cout << *it;
}
}
```
这段代码会跳过结束符,只打印实际的字符。
阅读全文