for 循环中的字符串函数

String function in for loops

本文关键字:字符串 函数 循环 for      更新时间:2023-10-16
for( it = str.begin(); it != str.end() && isspace( *it ); it++ ) ;
str.erase(str.begin(), it );

这个循环到底在做什么?

for( it = str.begin(); it != str.end() && isspace( *it ); it++ ) ;

此行将迭代器定位在字符串 ( str.begin() ( 的开头。条件it != str.end() && isspace( *it )用简单的英语表示"当尚未到达字符串的末尾并且当前字符是空格时,增加迭代器。

下一个

str.erase(str.begin(), it );

这会擦除字符串从开头到迭代器的部分。简而言之,它修剪字符串开头的任何空格

编辑:请阅读下面的评论,它为答案添加了有用的信息。

这段代码太聪明了,因为它本身就好了 - 有充分的理由不垂直地过多地压缩代码。
循环混淆就是其中之一。

重写了一点

for( it = str.begin(); it != str.end() && isspace(*it); it++ )
    ;
str.erase(str.begin(), it );

或者,等效地

for( it = str.begin(); it != str.end() && isspace(*it); it++ )
{
    // Personally, I always put an "intentionally left empty" comment inside these.
}
str.erase(str.begin(), it );

明确表示erase在循环之外

使用 while 重写循环

it = str.begin();
while (it != str.end() && isspace(*it))
{
    it++;
}
str.erase(str.begin(), it );

更明显的是,它首先找到字符串中的第一个非空格字符,然后删除它之前的所有内容,即修剪前导空格。

(我自己更喜欢while形式。

这段代码有两件事。

第一个找到字符串中的第一个字符,它不是空格:

for( it = str.begin(); it != str.end() && isspace( *it ); it++ ) ;

第二个删除所有字符,直到该字符:

str.erase(str.begin(), it );

它们的组合:代码删除字符串开头的空格字符:)