Форум программистов, компьютерный форум CyberForum.ru

Удалить из последовательности все повторные вхождения слов - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.83
user_p01
19 / 19 / 2
Регистрация: 03.11.2011
Сообщений: 80
10.09.2012, 15:56     Удалить из последовательности все повторные вхождения слов #1
При запуске программы появляется ошибка Debug Assertion Failed. Помогите пожалуйста исправить программу, чтобы программа запускалась и работала правильно.
Задание: Дана последовательность, содержащая несколько слов, разделенных пробелами, за последним словом - точка. Удалить из последовательности все повторные вхождения слов.
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
#include <iostream>
#include <string>
using namespace std;
int main()
{
    setlocale(LC_ALL, "rus");
    string a[255];
    string s, sl;
    int i, j, e=0, k;
    cout << "Введите строку:\n";
    cin >> s;
    sl=' ';
    int h=s.length();
    for (i=1; i<h; i++)
        if (s[i]!=' ' && s[i]!='.')
            sl+=s[i];
        else
            if (h>0)
            {
                e++;
                a[e]=sl;
                sl=' ';
            }
    for (i=1; i<e-1; i++)
        for (j=i+1; j<e; j++)
            if (a[i]==a[j])
            {
                for (k=j; k<e; k++)
                    a[k]=a[k+1];
                e--;
            }
            s=' ';
        for (i=1; i<e; i++)
            s=s+a[i]+' ';
        s[s.length()]='.';
        cout << s << endl;
        system("pause");
        return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.09.2012, 15:56     Удалить из последовательности все повторные вхождения слов
Посмотрите здесь:

Удалить из строки все вхождения заданного символа C++
Дана строка S1. Удалить в ней все вхождения символа '*' C++
C++ В предложении удалить все вхождения “th”. Результат вывести на экран
C++ Удалить из массива все одинаковые элементы, оставив их первые вхождения
C++ Использование библиотеки STL , контейнер string. Дан массив слов.Надо удалить все цифры из слов
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Andrew_Lvov
Эксперт C++
 Аватар для Andrew_Lvov
259 / 189 / 5
Регистрация: 19.08.2010
Сообщений: 758
Записей в блоге: 1
10.09.2012, 16:58     Удалить из последовательности все повторные вхождения слов #2
Первое: инкремент e в двойном цикле - скорее всего он становится меньше нуля.
Второе - индексы элементов контейнера (в данном случае - string) начинаются с нуля, а не с единицы.

Добавлено через 53 секунды
Дальше: цикл на 33й строке не попадает внутрь for'а на 24й строке. Так задумано ? Тогда исправь табуляцию.

Добавлено через 1 минуту
А падает у тебя на строке
s[s.length()], так как это выход за границы контейнера. Индексы елементов должны быть внутри
0 <= i < s.length
David Sylva
 Аватар для David Sylva
1280 / 942 / 51
Регистрация: 17.05.2012
Сообщений: 2,686
10.09.2012, 20:10     Удалить из последовательности все повторные вхождения слов #3
Можно вот так решить


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
#include <iostream> 
 
int main() 
{ 
    const int Size = 100; 
    char str[Size] = "Real Madrid Real Madrid."; 
    char* ptr;  
    char* word[Size]; 
    bool flag; 
    int count = 0; 
    unsigned int i;
 
    ptr = strtok(str, " ,.-"); 
 
    while(ptr!=NULL) 
    {   
        flag = true;  
 
        for ( i = 0; i < count; i++) 
            if(!strcmp(ptr,word[i])) 
            { 
                flag = false; 
                break; 
            } 
            if(flag) 
                word[count++] = ptr; 
            ptr = strtok(NULL,  " ,.-"); 
    } 
 
    for ( i = 0; i < count; i++) 
        std::cout << word[i] << " "; 
    std::cout << std::endl;
 
return 0;
}
Andrew_Lvov
Эксперт C++
 Аватар для Andrew_Lvov
259 / 189 / 5
Регистрация: 19.08.2010
Сообщений: 758
Записей в блоге: 1
10.09.2012, 20:15     Удалить из последовательности все повторные вхождения слов #4
2David Sylva
Что хорошего в том, что ты даёшь готовое решение ?
Пусть человек учится сам.
Петррр
 Аватар для Петррр
5915 / 3352 / 333
Регистрация: 28.10.2010
Сообщений: 5,926
10.09.2012, 20:19     Удалить из последовательности все повторные вхождения слов #5
Andrew_Lvov, мне, например, проще учиться на примерах. Что в этом плохого? Кому то проще набрать готовый код десять раз, а потом до него доходит что и как работает.
David Sylva
 Аватар для David Sylva
1280 / 942 / 51
Регистрация: 17.05.2012
Сообщений: 2,686
10.09.2012, 20:20     Удалить из последовательности все повторные вхождения слов #6
Мне кажется люди на форуме обращаются за помощью, готовое решение одно из видов помощи.Он может взять то, что ему пригодится, а не брать всё решение полностью.
Andrew_Lvov
Эксперт C++
 Аватар для Andrew_Lvov
259 / 189 / 5
Регистрация: 19.08.2010
Сообщений: 758
Записей в блоге: 1
10.09.2012, 20:42     Удалить из последовательности все повторные вхождения слов #7
Цитата Сообщение от David Sylva Посмотреть сообщение
Мне кажется люди на форуме обращаются за помощью, готовое решение одно из видов помощи.Он может взять то, что ему пригодится, а не брать всё решение полностью.
Give a man a fish, and you'll feed him for a day.
Teach a man to fish and you'll feed him for a life.

Петррр, примеры очень необходимы вначале. Но как только человек понял базовую концепцию, суть, стоит давать ему возможность включить мозги самому.
David Sylva
 Аватар для David Sylva
1280 / 942 / 51
Регистрация: 17.05.2012
Сообщений: 2,686
10.09.2012, 20:50     Удалить из последовательности все повторные вхождения слов #8
Цитата Сообщение от Andrew_Lvov Посмотреть сообщение
Give a man a fish, and you'll feed him for a day.
Teach a man to fish and you'll feed him for a life
Полностью согласен

Но, по примерам учиться легче. Потом я выкладываю своё решения и для того, чтобы профессионалы типа тебя или Петра указали мне на ошибки и я тоже от этого немного стал лучше понимать предмет.
silent_1991
10.09.2012, 21:20
  #9
 Комментарий модератора 
Оффтоп заканчиваем.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.09.2012, 21:41     Удалить из последовательности все повторные вхождения слов
Еще ссылки по теме:

Исключить из файла повторные вхождения чисел C++
C++ Удалить повторные вхождения слов в предложение
Удалить все вхождения заданного слова из текста C++

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

Или воспользуйтесь поиском по форуму:
I.M.
10.09.2012, 21:41     Удалить из последовательности все повторные вхождения слов
  #10

Не по теме:

David Sylva, смешиваете в коде unsigned и signed (i и Size). Некоторые переменные объявляете далеко от использования (например, i). И название некоторых переменных можно сделать более говорящими (например, flag).

Yandex
Объявления
10.09.2012, 21:41     Удалить из последовательности все повторные вхождения слов
Ответ Создать тему
Опции темы

Текущее время: 13:55. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru