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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.83
user_p01
19 / 19 / 2
Регистрация: 03.11.2011
Сообщений: 80
#1

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

10.09.2012, 15:56. Просмотров 1730. Ответов 9
Метки нет (Все метки)

При запуске программы появляется ошибка 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++):

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

Удалить повторные вхождения слов в предложение - C++
Дан файл, содержащий текст на русском языке. В предложениях некоторые из слов записаны подряд несколько раз (предложение заканчивается...

Удалить повторные вхождения каждого слова из строки - C++
Задана строка, состоящая из слов, разделенных одним или несколькими пробелами. Удалить повторные вхождения каждого слова.

Получить в новом файле отредактированный текст, в котором удалены повторные вхождения слов в предложение - C++
Здравствуйте.Помогите пожалуйста в решении вот такой задачи: Дан файл, содержащий текст на русском языке. В предложениях некоторые из...

Исключить из списка все повторные вхождения элементов - C++
Помогите плиз добить задачку (а именно часть с ExtraPrintList) на тему &quot;списки&quot;. Дан список из n целых чисел a1,a2,...,an. Исключить из...

Напечатать все слова, отличные от последнего, удалив из слов все последующие вхождения первой буквы - C++
Дана последовательность, содержащая от 2 до 30 слов, в каждом из которых от 2 до 10 латинских букв, между соседними словами заданы не менее...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Andrew_Lvov
Эксперт С++
259 / 189 / 5
Регистрация: 19.08.2010
Сообщений: 760
Записей в блоге: 1
10.09.2012, 16:58 #2
Первое: инкремент e в двойном цикле - скорее всего он становится меньше нуля.
Второе - индексы элементов контейнера (в данном случае - string) начинаются с нуля, а не с единицы.

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

Добавлено через 1 минуту
А падает у тебя на строке
s[s.length()], так как это выход за границы контейнера. Индексы елементов должны быть внутри
0 <= i < s.length
David Sylva
1285 / 947 / 51
Регистрация: 17.05.2012
Сообщений: 2,687
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
Эксперт С++
259 / 189 / 5
Регистрация: 19.08.2010
Сообщений: 760
Записей в блоге: 1
10.09.2012, 20:15 #4
2David Sylva
Что хорошего в том, что ты даёшь готовое решение ?
Пусть человек учится сам.
Петррр
5949 / 3386 / 337
Регистрация: 28.10.2010
Сообщений: 5,926
10.09.2012, 20:19 #5
Andrew_Lvov, мне, например, проще учиться на примерах. Что в этом плохого? Кому то проще набрать готовый код десять раз, а потом до него доходит что и как работает.
David Sylva
1285 / 947 / 51
Регистрация: 17.05.2012
Сообщений: 2,687
10.09.2012, 20:20 #6
Мне кажется люди на форуме обращаются за помощью, готовое решение одно из видов помощи.Он может взять то, что ему пригодится, а не брать всё решение полностью.
Andrew_Lvov
Эксперт С++
259 / 189 / 5
Регистрация: 19.08.2010
Сообщений: 760
Записей в блоге: 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
1285 / 947 / 51
Регистрация: 17.05.2012
Сообщений: 2,687
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
 Комментарий модератора 
Оффтоп заканчиваем.
I.M.
10.09.2012, 21:41     Удалить из последовательности все повторные вхождения слов
  #10

Не по теме:

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

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.09.2012, 21:41
Привет! Вот еще темы с ответами:

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

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

Удалить из строки все вхождения заданного символа - C++
12. Преобразовать заданную строку следующим образом: удалить из строки все вхождения заданного символа; Соль в том что это нужно...

Удалить все вхождения элемента в односвязном списке - C++
Нужна функция для удаления всех вхождений элемента в односвязном списке


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru