С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 02.02.2016
Сообщений: 2
1

Почему неправильно удаляются слова?

02.02.2016, 00:56. Показов 782. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый вечер/день всем. Есть такая задача - "Удалить из строки все повторяющиеся слова". Решаю её уже 9 часов с перерывами максимум 30 минут. Очень раздражён от того, что не могу решить. С разными строками работает по-разному, где-то всё правильно удаляет, где-то удаляет всё, где-то не удаляет некоторые слова. Прошу помочь. Код выкладываю. Просьба, не использовать слишком крутой код, нужно сделать всё как можно проще (строки начали изучать недавно).

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#include <iostream>
#include <string>
#include <windows.h>
using namespace std;
 
 
int main()
{
    SetConsoleCP(1251);// установка кодовой страницы win-cp 1251 в поток ввода
    SetConsoleOutputCP(1251); // установка кодовой страницы win-cp 1251 в поток вывода
 
    string str; //сама строка
    string replay; // для проверки слов на повтор
 
    cout<<"Введите сообщение:\n";
    getline (cin, str);
 
    int j=0, k=0, s=0, pos =0; //j - для перебора букв, k - для копирования слова, s - для проверки слов после проверяемого, pos - хотел сделать для того, чтобы если слово не удаляется, проверка начиналась после него, но не получилось
    
    for (unsigned int i=0; i < str.length(); i++)
    {
        while (str[j]!=' ') //цикл для выделения каждого слова
        {
            j++;
            k++;
            pos++;
        }
 
    replay = str.substr (0, k); //копирование слова для проверки
    s+=k+1; //слово + пробел
    auto help = 0;
     help = str.find (replay, s); / проверяет, есть ли такие же слова 
            if (replay!="" && help!=-1) //если в replay не пустая строка, а слово и найдено такое же слово, то..
            {
                unsigned int h = str.find (replay); //ищет первое вхождение слова в строке
                 while ( h!=std::string::npos) //пока такое слово вообще есть в строке
                 {
                     str.erase (str.find (replay), (replay.length()+1)); //удаление слова
                     h = str.find (replay);
                 }
                 pos=0;
            }
        j=0;
        k=0;
        s=0;
    }
 
    cout<<"Изменённое сообщение:\n"<<str<<endl;
 
    return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.02.2016, 00:56
Ответы с готовыми решениями:

Не удаляются повторно встречающиеся слова в строке или удаляются не те
Есть программа Sub Slova() Dim text As String text = InputBox(&quot;Vvedite stroky&quot;) a =...

Неправильно удаляются контролы с формы
Здравствуйте. Проблема вот в чем , когда я пытаюсь удалить контролы с формы то они почему то...

Неправильно удаляются строки в dataGridView
Не правильно удаляються строки в dataGridView.В чем может быть ошибка ?private void...

Почему удаляются строки?
Sub CommandButton4_Click() Dim oTable As Word.Table Set oTable =...

3
Dimension
594 / 462 / 223
Регистрация: 08.04.2014
Сообщений: 1,710
02.02.2016, 01:05 2
порядок слов после удаления повторов важен ?
0
0 / 0 / 0
Регистрация: 02.02.2016
Сообщений: 2
02.02.2016, 03:03  [ТС] 3
Да, слова должны выводиться в том же порядке, что и были, главное, чтобы были удалены повторяющиеся
0
Dimension
594 / 462 / 223
Регистрация: 08.04.2014
Сообщений: 1,710
02.02.2016, 08:34 4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
int main() {
    string text,buf,newtext;
    vector<string> used;
    used.push_back("");
    bool find = 0;
    getline(cin, text);
    for (int i = 0;i < text.size();i++) {
        while (i < text.size() && text[i] != ' ')
            buf += text[i], i++;
        for (int j = 0;j < used.size();j++) 
            if (used[j] == buf) 
                find = 1;
        if (!find) {
            used.push_back(buf);
            newtext += buf + " ";
        }
        buf.clear();
        find = 0;
    }
    cout << newtext;
    return 0;
}
0
02.02.2016, 08:34
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.02.2016, 08:34
Помогаю со студенческими работами здесь

Не удаляются почему-то данные
Здравствуйте. Такой вопрос. Вот есть у меня List&lt;Man&gt;, у myclass есть свойство DateTime dt. Надо...

Почему не удаляются выделенные чекбоксы
Почему не удаляются выделенные чекбоксы ('#my_form :checkbox:checked').fadeOut(5000);

Почему удаляются ссылки из List
Обьясню ситуацию. Создаю List&lt;String&gt; 1.добавил в него елементов 2.Создал новый класс с...

Почему файлы с пометкой копия не удаляются?
Не удаляются и не перемещаются в другие папки.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru