2016-11-21 3 views
1

Мой код выглядит следующим образом:Почему строка :: find_first_of() возвращает неожиданный результат?

string s_1 = "ssissippi"; 
string s = "si"; 
size_t pos = s_1.find_first_of(s); 
while (pos != string::npos) 
{ 
    cout << pos << endl; 
    pos++; 
    pos = s_1.find_first_of(s, pos); 
} 

И я получаю такой результат: 0,1,2,3,4,5,8.
Я не могу понять, что приводит к ответу. Буду признателен за любую помощь.

+1

Какой результат вы ожидали? –

+2

Кроме того, из [this 'std :: string :: find_first_of' reference] (http://en.cppreference.com/w/cpp/string/basic_string/find_first_of):« Находит первый символ, равный *** одному *** символов в заданной последовательности символов. " –

+0

Я считаю, что вы не один, кто неправильно читал документ. Поэтому вопрос может быть полезен для других. –

ответ

6

Кажется, вы имели в виду функция член find() вместо find_first_of()

Например:

string s_1 = "ssissippi"; 
string s = "si"; 
size_t pos = s_1.find(s); 
while (pos != string::npos) 
{ 
    cout << pos << endl; 
    pos++; 
    pos = s_1.find(s, pos); 
} 

Функция член find_first_of() находит первую позицию в исходной строке, где один из символов магазинов в заданной строке поскольку аргумент присутствует.

+0

Спасибо за вашу помощь, я знаю, где я ошибаюсь, прочитав снова ссылку. –

6

Ваш find_first_of делает:

находит первый символ, равный одному из символов ул.

Так что не проверяет строку «си» будучи там (как вы, возможно, ожидали), а скорее как «s» или «я». Используйте std::string::find(), чтобы проверить всю строку.

+1

Большое спасибо, я получил это. Спасибо за вашу помощь. –

Смежные вопросы