Разбиение строки c ++ на две части - PullRequest
3 голосов
/ 01 мая 2011

Я пытаюсь разбить строку, содержащую "|" на две части.

if (size_t found = s.find("|") != string::npos)
{
    cout << "left side = " << s.substr(0,found) << endl;
    cout << "right side = " << s.substr(found+1, string::npos) << endl;

}

Это работает с «a | b», но с «a | b» у него будет «| b» в качестве правой стороны. Это почему? Как это можно исправить?

1 Ответ

13 голосов
/ 01 мая 2011
size_t found = s.find("|") != string::npos

Это декларация;он анализируется как

size_t found = (s.find("|") != string::npos)

Таким образом, found всегда будет 1 или 0.Вам нужно объявить found вне условия и использовать несколько скобок:

size_t found;
if ((found = s.find("|")) != string::npos)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...