我有一个字符串,开头有很多空格。如果我想找出第一个不是空格的角色的位置,我该怎么做?
答案 0 :(得分:15)
请参阅std::string::find_first_not_of
。
找到第一个非空格字符的位置(索引):
str.find_first_not_of(' ');
查找第一个非空白字符的位置(索引):
str.find_first_not_of(" \t\r\n");
如果str.npos
为空或完全由空格组成,则返回str
。
您可以使用find_first_not_of
修剪有问题的前导空格:
str.erase(0, str.find_first_not_of(" \t\r\n"));
如果您不想硬编码哪些字符算作空白(例如使用区域设置),您仍然可以或多或少地使用isspace
和find_if
最初由 sbi 建议的方式,但要注意否定isspace
,例如:
string::iterator it_first_nonspace = find_if(str.begin(), str.end(), not1(isspace));
// e.g. number of blank characters to skip
size_t chars_to_skip = it_first_nonspace - str.begin();
// e.g. trim leading blanks
str.erase(str.begin(), it_first_nonspace);
答案 1 :(得分:5)
我只有一个问题:你真的需要额外的空白吗?
我会在那里调用Boost.String的力量;)
std::string str1 = " hello world! ";
std::string str2 = boost::trim_left_copy(str1); // str2 == "hello world! "
当您需要find
操作时,有许多操作(trim
,replace
,string
,...)以及此库中可用的谓词没有提供开箱即用,请点击此处。此外,算法每次都有几种变体(不区分大小写,一般都是复制)。