2015-10-25 3 views
-1

здесь текстПочему это дает мне неправильный индекс

«Авраам, Йоханнес А.», Сотрудник

Я хочу индекс второй запятой

вот мой код int foundStatus = tempString.find_first_of(",", 8);

Я думал, что это вернет индекс второй запятой после индекса 8, который равен 22, но когда я дам -1 вместо

+0

Как вы инициализируете 'tempString'? Он работает [здесь] (https://ideone.com/GwMkGY). – sam

+0

Показать полный код для воспроизведения этой проблемы. –

+0

Ох - Я уверен, что OP проверил с помощью своего отладчика, чтобы «tempString» содержал точный текст, как описано выше ............. –

ответ

0

Вам необходимо позвонить std::string::find_first_of с 9 в качестве второго параметра, а не 8 (если ваша строка: "\"Abraham, Yohannes A.\", Employee, "). В противном случае он просто будет возвращать 8, а не 22. Возвращаемое значение std::string::npos (-1) означает, что он не мог найти запятую после - проверить входную строку в два раза, что есть на самом деле вторая запятая после позиции 8.

следующий код будет выводиться правильно 22:

#include <iostream> 
#include <string> 

int main(int argc, char* argv[]){ 
    std::string tempString = "\"Abraham, Yohannes A.\", Employee, "; 
    size_t firstComma = tempString.find_first_of(","); // firstComma = 8 
    if (firstComma != std::string::npos) { 
    size_t secondComma = tempString.find_first_of(",", firstComma+1); // secondComma = 22 
    std::cout << secondComma << std::endl; 
    } 
    return 0; 
} 
+0

вся строка temp - «Авраам, Йоханнес А.», сотрудник, 120000,00 долларов США, в год, СПЕЦИАЛЬНЫЙ ПОМОЩНИК ПРЕЗИДЕНТУ И ГЛАВУ ПЕРСОНАЛА ДЛЯ ОФИСА ОБЩЕСТВЕННОГО ВЗАИМОДЕЙСТВИЯ И МЕЖПРАВИТЕЛЬСТВЕННЫХ ВОПРОСОВ, поэтому я считаю, что после позиции 8 есть запятая 0 – ckmss

+0

i используйте 9 или больше, но все равно возвращаете -1 – ckmss

+0

и почему вы добавляете \ "в строку temp tho? – ckmss

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