C++ 如何在C++;一串
我有一个字符串,它以很多空格开头。如果我想找出第一个不是空格的字符的位置,我该如何做?请参阅 要查找第一个非空格字符的位置(索引):C++ 如何在C++;一串,c++,string,C++,String,我有一个字符串,它以很多空格开头。如果我想找出第一个不是空格的字符的位置,我该如何做?请参阅 要查找第一个非空格字符的位置(索引): str.find_first_not_of(' '); str.find_first_not_of(" \t\r\n"); 要查找第一个非空字符的位置(索引),请执行以下操作: str.find_first_not_of(' '); str.find_first_not_of(" \t\r\n"); 如果str为空或完全由空格组成,则返回str.npos
str.find_first_not_of(' ');
str.find_first_not_of(" \t\r\n");
要查找第一个非空字符的位置(索引),请执行以下操作:
str.find_first_not_of(' ');
str.find_first_not_of(" \t\r\n");
如果str
为空或完全由空格组成,则返回str.npos
您可以使用find_first_not_of
来修剪有问题的前导空格:
str.erase(0, str.find_first_not_of(" \t\r\n"));
如果您不想硬编码哪些字符算空白(例如,使用区域设置),您仍然可以或多或少地按照sbi最初建议的方式使用
isspace
和find_If
,但要注意否定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);
我只有一个问题:你真的需要额外的空格吗 我会在那里召唤上帝的力量;)
此库中有许多操作(
find
,trim
,replace
,…)以及谓词,只要您需要string
操作,而这些操作不是现成提供的,请选中此处。此外,算法每次都有几个变体(不区分大小写,通常是复制)。字符串的编码是什么?如果是ASCII码,那么只有4个空格字符,Vlad使用find_first_not_of的解决方案很好。ASCII或拉丁1字符串可能包含教学练习。如果您的字符串是UTF-8或宽字符std::wstring(在实际应用程序中可能是这样),请询问另一个问题。是的,在这种情况下,您可以在同一篇文章的底部使用find\If
解决方案(可以选择使用BLL的boost::labda::bind(isspace,\u 1,my\u locale)
将特定区域设置my_locale
绑定到isspace
而不是使用默认设置)。