singlepost

вырезать из строки все слова, встречающиеся более двух раз. << На главную или назад  

Пользователь вводит натуральное число n. Это - длина нашей строки. Необходимо вырезать из этой строки все слова, встречающиеся более двух раз.
Если никто не решится помочь мне с кодом, то киньте хотя бы идею решения. А если решитесь, то очень прошу, делайте комментарии, чтобы мне было понятно. Благодарю!

121 ответов в теме “вырезать из строки все слова, встречающиеся более двух раз.”

Страницы: [1] 2 3 »

  1. 1
    Николай Немов ответил:

    Ну… создаем новую строку и структуту строк. В структуру забиваем все слова, которые нам встречаются при движении по строке с проверкой, не всречалось ли такое слово раньше. Если встречалось, то увеличиваем счетчик у данного слова. Так мы узнаем слова, которые нужно выкинуть. А потом записываем в новую строку нашу изначальную строку без тех слов, которые нам надо выкинуть.
    Как я тебе код напишу, если ты даже язык не сказал?!

  2. 2
    Антон Кононов ответил:

    1) режем строку на слова, слова суем в массив
    2) сортируем массив
    3) если в массиве предыдущий и текущий элемент одинаковы, то это слово удаляем из строки

    как-то так на вскидку

  3. 3
    Александр Васюченко ответил:

    да просто. создаём структуру вида

    struct word
    {
    char s_word[100]; // слово
    int n_repeat; // количество повторений этого слова
    }

    создаём массив этой структуры, скажем так из 200 элементов:

    struct word words[200];

    сканируем строку. если встречаем новое слово, то заполняем новый элемент этого массива, где в поле s_word пишем это слово, а в
    поле n_repeat пишем единицу, а если встречаем слово, которое уже было ранее (повторяющееся), то в элементе массива с этим
    словом увеличиваем поле n_repeat на единицу.

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

  4. 4
    Cyber Max ответил:

    #4 уж очень вы расточительно память используете!!!
    char s_word[100]; – а если у меня слово будет 101 байт?
    - поменять на std::string

    struct word words[200]; – а если будет только 2 слова? тогда 198 структур на стеке в пустую?или например 202 слова – тогда срыв стека!!!
    - поменять на std::list<struct word>

  5. 5
    Александр Васюченко ответил:

    #5 вы верно подметили, я знал об этом перед тем как писать. Написал так для простоты. А может человеку вообще на паскале прога надо?

  6. 6
    Пашка Джиоев ответил:

    Ну на паскале тоже можно с динамической памятью работать.

  7. 7
    Антон Кононов ответил:

    на паскале строка у нас не ограничена ли случайно? :) 250 символов

  8. 8
    Александр Васюченко ответил:

    #7
    можно. а там есть аналогstd::list ?
    если нет, то надо самому писать класс – двусвязного списка

  9. 9
    Александр Васюченко ответил:

    #8 мне помниться, что там ограничена 255 символами

  10. 10
    Михаил Асташкевич ответил:

    Строки в паскале… Смотря какая версия) В поздних версиях есть ansistring – строка неограниченной длины.

    #9
    Нету, но можно обявить динамический массив и потом по мере надобности менять его длину.

Страницы: [1] 2 3 »

Клуб программистов работает уже ой-ой-ой сколько, а если поточнее, то с 2007 года.