Как определить «_» в строке C ++? - PullRequest
5 голосов
/ 16 сентября 2010

Я хочу знать позиции "_" в строке:

string str("BLA_BLABLA_BLA.txt");

Что-то вроде:

string::iterator it;
for ( it=str.begin() ; it < str.end(); it++ ){
 if (*it == "_")         //this goes wrong: pointer and integer comparison
 {
  pos(1) = it;
 }
 cout << *it << endl;
}

Спасибо, Андре

Ответы [ 5 ]

16 голосов
/ 16 сентября 2010

Обратите внимание, что "_" - это строковый литерал , а '_' - это символьный литерал .

Если вы разыменуете итератор в строку, вы получите символ . Конечно, символы можно сравнивать только с символами литералами , но не с строками литералами .

Однако, как уже заметили другие, вы не должны реализовывать такой алгоритм самостоятельно. Это было сделано миллион раз, два из которых (std::string::find() и std::find()) оказались в стандартной библиотеке C ++. Используйте один из них.

9 голосов
/ 16 сентября 2010
std::find(str.begin(), str.end(), '_');
                               // ^Single quote!
8 голосов
/ 16 сентября 2010

строка :: найти твой друг.http://www.cplusplus.com/reference/string/string/find/

someString.find('_');
6 голосов
/ 16 сентября 2010

Почему вы не используете метод поиска: http://www.cplusplus.com/reference/string/string/find/

6 голосов
/ 16 сентября 2010

Вы можете использовать функцию find как:

string str = "BLA_BLABLA_BLA.txt";
size_t pos = -1;

while( (pos=str.find("_",pos+1)) != string::npos) {
        cout<<"Found at position "<<pos<<endl;
}

Выход:

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