Я только заметил это странное поведение string :: find. У меня есть непустая строка b и еще одна пустая строка a. Когда я вызываю b.find (a), он должен возвращать npos, но возвращает 0.Почему поиск пустой строки в непустой строке возвращает 0
#include <iostream>
#include <string>
using namespace std;
int main() {
// your code goes here
string a , b("ABC");
if (string::npos == b.find(a)) std::cout << std::endl << "TRUE" << std::endl;
return 0;
}
Выше кода не печатает true. Может кто-нибудь, пожалуйста, объясните мне, что это значит? Так как a пусто и b непусто, то найти пустую строку в непустой не имеет смысла и, следовательно, является ошибкой. Поэтому он должен вернуть НСС
Благодарности
Пустая строка действительно содержится в любой другой строке, поэтому результат 0 правильный – Vitor
Это один из тех случаев, когда вы должны быть осторожны и дезинфицировать свой ввод. – Casey
* «Когда я вызываю b.find (a), он должен возвращать npos« * - откуда вы получаете эту идею? В будущем проверьте [cppreference docs] (http://en.cppreference.com/w/cpp/string/basic_string/find), прежде чем предполагать такие вещи - это объясняет это очень четко. –