Как найти первый символ в строке C ++ - PullRequest
6 голосов
/ 27 февраля 2010

У меня есть строка, которая начинается с большого количества пробелов. Если я хочу узнать позицию первого символа, который не является пробелом, как бы я это сделал?

Ответы [ 2 ]

15 голосов
/ 27 февраля 2010

См. 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);
5 голосов
/ 27 февраля 2010

У меня только один вопрос: вам действительно нужны лишние пробелы?

Я бы вызвал силу Boost.String там;)

std::string str1 = "     hello world!     ";
std::string str2 = boost::trim_left_copy(str1);   // str2 == "hello world!     "

В этой библиотеке доступно много операций (find, trim, replace, ...), а также предикатов, когда вам нужно string операций, которые не предоставляются из коробки, отметьте Вот. Также алгоритмы имеют несколько вариантов каждый раз (без учета регистра и с копией в целом).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...