Метод find_first_not_of
интерпретирует последний аргумент как число символов, которые необходимо учитывать в первом аргументе, а не в строке.
size_type std::string::find_first_not_of(
const char* str, size_type index, size_type num) const;
Аргумент num
- это число, которое нужно учитывать в str
, а не в this
! Так что в вашем случае это только первый символ " \t\n\v\f\r"
. Ваш код эквивалентен:
#include <cstdio>
#include <string>
int main(void)
{
printf("%u\n", std::string("\n").find_first_not_of(" ", 0));
}
Если вы хотите сопоставить только подстроку std::string
, я думаю, что вы должны вызвать find_first_not_of
для явной подстроки, то есть:
#include <cstdio>
#include <string>
int main(void)
{
printf("%u\n", std::string("\n").substr(0, 1).find_first_not_of(" \t\n\v\f\r"));
}
Кстати, здесь - описание поведения find_first_not_of
метода:
Функция find_first_not_of () либо:
- возвращает индекс первого символа в текущей строке, который не соответствует ни одному символу в str, начиная поиск по индексу, string :: npos, если ничего не найдено,
- ищет в текущей строке, начиная с индекса, любой символ, который не соответствует первым num символам в str, возвращая индекс в текущей строке первого найденного символа, который соответствует этому критерию, в противном случае возвращает строку :: npos,
- или возвращает индекс первого вхождения символа, который не соответствует ch в текущей строке, начиная поиск по индексу, string :: npos, если ничего не найдено.