я пытаюсь сравнить слова массива с помощью strcmp. Я пытаюсь получить каждое слово, которое появляется в массиве более одного раза, для печати только один раз, поэтому я могу определить количество уникальных слов. Я знаю, что он делает неправильно, когда он ищет массив, он выводит каждую найденную копию, например, если слово «the» находится в массиве 4 раза, оно будет выводить «the» 3 раза, и когда string1
переходит к следующему месту, где находится «the», оно распечатает 2 раза и так далее.
Поиск совпадения в массиве с помощью strcmp
Ответы (2)
хорошо, что вы добавили объявления,
теперь из того, что выглядит, кажется, что words[][] является излишним и делает вещи ненужными. если вы заинтересованы только в получении уникальных слов, вместо этого просто обработайте то, что возвращается от strtrok, создав словарь с встречающимися словами
словарь может быть чем-то таким же простым, как массив максимального размера, содержащий уникальные слова, и индекс, начинающийся с 0, когда массив пуст, всякий раз, когда strtok возвращает слово, просматривайте массив и ищите слово, используя ваш strcmp, если это не так не существует, добавьте его в конец массива, затем увеличьте, а затем индексируйте.
а Боб твой дядя :)
Преобразуйте свои массивы символов в std::string
и вместо того, чтобы печатать их, поместите их в std::set
. Затем распечатайте каждый элемент набора.
std::string
, не говоря уже о std::set
.
- person flight; 18.09.2011
strcmp()
для сравнения строк в C++? Уstd::string
прекрасноеoperator ==
! - person Johnsyweb   schedule 18.09.2011std::string
? Вы пишете C++! - person Johnsyweb   schedule 18.09.2011words
— это 2D-массивchar*
, что делаетstring1
похожим на массивchar*
, а вызовstrlen(string1)
очень сомнительным.std::string
, безусловно, подходит для этого (в сочетании сstd::set
для изоляции уникальных записей, как это предлагается в ответ Бенджамина. - person Johnsyweb   schedule 18.09.2011