Вызов функции string.find () и присвоение ее возвращаемого значения переменной внутри условия if - PullRequest
0 голосов
/ 16 апреля 2020

У меня проблемы с пониманием, что именно происходит, когда я помещаю функцию .find () внутрь условия if. Подобный вызов для l oop, кажется, работает хорошо.

Часть моего кода выглядит следующим образом:

    size_t endPos = strbuf.find(endSeq)+endSeq.size();
    cout<<endPos<<endl;

    if (size_t endPosif = strbuf.find(endSeq)+endSeq.size() != string::npos)
    {
        cout<<endPosif<<endl;
    }

    for (size_t endPosfor = strbuf.find(endSeq)+endSeq.size();endPosfor != string::npos; 
        endPosfor=strbuf.find(startSeq,endPosfor+1)+endSeq.size())
    {
        cout<<endPosfor<<endl;
    }

Вывод:

466
1
466

Что вызывает это поведение? Я хотел бы использовать endPosif внутри оператора if.

1 Ответ

0 голосов
/ 16 апреля 2020

Я хотел бы знать, почему моя переменная равна 1 внутри оператора. Это был мой вопрос

if (size_t endPosif = strbuf.find(endSeq)+endSeq.size() != string::npos)

this strbuf.find(endSeq)

  • возвращает string::npos (что похоже на -1), когда ничего не найдено
  • или что-то в рагне <0, strbuf.size() - endSeq.size()>

Когда вы добавляете к этому endSeq.size() (что никогда не равно нулю) результат всегда отличается от string::npos.

Так что это strbuf.find(endSeq)+endSeq.size() != string::npos оценивается как true.

true преобразуется в 1 при приведении к size_t.

Таким образом, у вас есть две ошибки:

  • неправильно обрабатывать сценарий, когда ничего не найдено
  • порядок оценки (поэтому user7860670 писал о скобках)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...