Почему string::find ведёт себя по разному

112
26 марта 2021, 20:50

Есть код

bool check_tape(char* tape) {
    int test8; 
    cout << example <<" "<<example.size()<<" "<<alpha_sym<<" "<< endl;
    cin >> test8; //Чтобы приостановить программу, сделано тоже временно
    int err = 0;
    for (int i = 0; i < example.size(); i++) {
        if (alpha_sym.find(example[i]) >= 0 && alpha_sym.find(example[i]) < example.size()) {
            cout << alpha_sym.find(example[i]) << " " << endl;
            err += 0;
        }
        else {
            cout << example[i]<<" "<< i << " не содержится в алфавите" << endl;
            err++;
        }
    }
    if (err) {
        return 1; //Временно сделан возврат 1, чтобы не прерывалась программа
        //get_acmd();
    }
    else return 1;
}

Проблема в том, что в одном случае find возвращает позицию первого вхождения, а в другом сам символ, который искался в строке. 111+11 - строка, символы из которого ищутся в 1+_ Так же и с 1435+212, символы из которого ищутся в 01234567+_

Answer 1

Не ясно почему вдруг в

if (alpha_sym.find(example[i]) >= 0 && alpha_sym.find(example[i]) < example.size())

делается сравнение с example.size(). Также, результат std::string::find имеет беззнаковый тип. Поэтому не ясно, что здесь делает сравнение >= 0 и какой смысл вы в него вкладывали.

Не ясно также, с чего вы взяли, что у вас где-то "find возвращает сам символ, который искался в строке". Ничего подобного, разумеется, не происходит.

В случае неудачного поиска функция std::string::find возвращает значение std::string::npos. Вот на него и надо проверять, а не изобретать какие-то свои способы проверки.

И что за манера вызывать одну и ту же относительно "тяжелую" функцию несколько раз с одними и теми же параметрами?

READ ALSO
Как ограничить длину списка у .selectmenu JQuery UI

Как ограничить длину списка у .selectmenu JQuery UI

Есть выпадающее меню сделанное благодаря стилизации тега select с классом meal черезselectmenu, в списке очень много элементов и при открытии они все...

133
Дистанционная активация selectmenu JQuery UI

Дистанционная активация selectmenu JQuery UI

Есть элемент стилизованный благодаря selectmenu, также есть кнопка в другой месте страницы (но в пределах видимости экрана относительно selectmenu,...

138
Не отображается задний фон

Не отображается задний фон

Не подгружается картинка заднего фона, которая прописана в файле cssСам css файл подгружается

113
Просвечивающий изображение блок

Просвечивающий изображение блок

Подобных вещей еще не приходилось реализовывать, по этому нуждаюсь в помощи выбора оптимального способа реализацииПостараюсь максимально...

96