Как найти ключевое слово в строке в C ++ - PullRequest
0 голосов
/ 11 апреля 2020

Когда вы используете заданное ключевое слово c, необходимо распечатать все слова, содержащие это ключевое слово. Вы не должны использовать массивы для решения проблем.

Я использовал функцию find(), чтобы получить код, который печатается из начального индекса ключевого слова, пока не появится ',', но есть ошибка .

image]

image

Вот код:

#include <iostream>
#include <string>
#include <limits.h>
using namespace std;

int main() {
    string data = "사랑,프로그래머,의자,사랑의바보,영통역,천년의사랑,냉장고,객체지향";
    string keyword;
    cout << "키워드 : ";
    cin >> keyword;
    int i = 0;
    while (1) {
        i = data.find(keyword, i);
        if (i == INT_MAX) return 0;
        while (data[i] != ',') {
            cout << data[i] << " ";
            i++;
        }
    }
}

Даже если он успешно компилируется, если ключевое слово после слова, оно не может быть напечатано.

В общем, мои вопросы:

  1. Проблемы в приведенном выше коде при условии, что ключевое слово находится перед словом.

  2. Идея напечатать слово, даже если ключевое слово находится за ним.

1 Ответ

1 голос
/ 11 апреля 2020

std::string::find возвращает std::string::npos, если ничего не находит.

Результат имеет тип std::size_t, а не int: std::size_t i = 0;

Внутренний while l oop выходит за границы после последнего слова: while (i < data.length() && data[i] != ',')

#include <iostream>
#include <string>
using namespace std;

int main() {
    string data = "사랑,프로그래머,의자,사랑의바보,영통역,천년의사랑,냉장고,객체지향";
    string keyword;
    cout << "키워드 : ";
    cin >> keyword;
    std::size_t i = 0;
    while (1) {
        i = data.find(keyword, i);
        if (i == std::string::npos) return 0;
        while (i < data.length() && data[i] != ',') {
            cout << data[i] << " ";
            i++;
        }
    }
}
...