итерация строки в C, слово за словом - PullRequest
2 голосов
/ 29 ноября 2011

Я только начал изучать C. Сейчас я пытаюсь понять, что у меня есть две строки, в которых каждое слово отделено пробелами, и я должен вернуть количество подходящих слов в обеих строках.Итак, есть ли какая-нибудь функция в C, где я могу взять каждое слово и сравнить его с каждым другим словом в другой строке, если не знаю, как мне это сделать.

Ответы [ 3 ]

1 голос
/ 29 ноября 2011

Разбейте первую строку в словах, это вы можете делать любым количеством способов, начиная от циклического перебора массива символов, вставляя \0 в каждый пробел, до использования strtok.

Для каждого найденного слова просмотрите другую строку, используя strstr, которая проверяет, есть ли там строка. просто проверьте возвращаемое значение из strstr, если != NULL оно его нашло.

0 голосов
/ 29 ноября 2011

Здесь есть две проблемы:

1) разбиение каждой строки на слова

Функция strtok() может разбивать строку на слова.

Это значимое упражнение - представить, как вы можете написать свой собственный эквивалент strtok.

Проект rosetta демонстрирует как strtok, так и индивидуальный подход к решению этой проблемы.

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

2) найти те слова в одной строке, которые также находятся в другой

Если вы перебираете каждое слово в одной строке для каждого слова в другом, оно имеет O (n * n) сложность.

Если вы индексируете слова в одной строке, это займет всего O (n), что значительно быстрее (если ваш ввод достаточно велик, чтобы сделать это интересным). Стоит представить, как можно построить хеш-таблицу слов в одной строке, чтобы можно было искать слова в другой.

0 голосов
/ 29 ноября 2011

Я бы не использовал strtok, но придерживался сравнения длины арифметики с указателем и memcmp для сравнения строк равной длины.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...