如何在C ++字符串中查找第一个字符

时间:2010-02-27 08:54:47

标签: c++ string

我有一个字符串,开头有很多空格。如果我想找出第一个不是空格的角色的位置,我该怎么做?

2 个答案:

答案 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"));

如果您不想硬编码哪些字符算作空白(例如使用区域设置),您仍然可以或多或少地使用isspacefind_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操作时,有许多操作(trimreplacestring,...)以及此库中可用的谓词没有提供开箱即用,请点击此处。此外,算法每次都有几种变体(不区分大小写,一般都是复制)。