for 循环中的字符串函数
String function in for loops
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 );
它们的组合:代码删除字符串开头的空格字符:)
相关文章:
- 字符串函数在目标C++上运行时C++返回空
- 字符串函数返回奇怪的值
- 这里的字符串函数是什么意思
- 在字符串函数中抛出'char const*'实例后调用的终止
- 为什么 stl 字符串C++函数有时出错有时会出错?
- 从C++为字符串函数设置_ENV
- 来自 2D 数组的字符串函数
- 返回最长的公共子字符串函数 c ++
- 使用getline和字符串函数C++程序中的分段错误
- 在字符串函数的指针中返回地址
- 字符串函数:strcat()
- 这个子字符串函数有什么问题
- 字符串函数不返回字符串? C++
- 使用向量和字符串函数返回字符串
- 尝试修复一个字符串函数,该函数采用字符串并通过替换一些单词来更改它
- 逐字读取字符数组,无需字符串函数
- 我从我的字符串函数返回到主函数
- 为什么我不能从字符串函数返回字符串数组?
- 如何在不使用字符串函数的情况下在char数组中找到字符串?(C )
- 带有 #include< iostream.h> 的程序允许使用 strlen() 等字符串函数。为什么?