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
而不是使用默认设置)。