1 / 1 / 0
Регистрация: 05.10.2013
Сообщений: 78
1

Задан список строк. Исключить из него одинаковые строки

22.10.2014, 16:18. Показов 569. Ответов 2
Метки нет (Все метки)

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

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

Шаблон проги есть. Где case3: оставил место для алгоритма исключения строк.

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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
// alg3.cpp : Defines the entry point for the console application.
//6. Задан список строк. Исключить из списка одинаковые строки.
 
#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <locale.h>
#include <iostream>
#include <Windows.h>
#include <string>
 
using namespace std;
 
struct list1 //список
{
    string str;
    list1 *nextl;
}*UN1, *UK1;
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(0,"rus");
    
    bool isList1Exists = false; //1 список пока не существует
 
    bool exit = false;
 
    do
    {
        char selector = 0;
        cout << "Главное меню" << endl << endl;
        cout << "1. Добавить строку в список" << endl;
        cout << "2. Вывести строки из списка" << endl;
        cout << "3. Исключение из списка одинаковых строк" << endl;
        cout << "4. Выход из программы" << endl;
 
        cin >> selector;
 
        char continueInput;
 
        switch (selector)
        {
        case '1':
            do
            {
                system("cls");
                continueInput = 0;
                list1 *element = new list1;// создание новой строки в списке
                if (isList1Exists == false) //Если это первый элемент, то ...
                {
                    UN1 = element; //устанавливаем указатель на начало списка на первый элемент
                    UK1 = element; // устанавливаем указатель на конец списка на первый элемент
                    element->nextl = NULL; //следующего элемента нет, т.к. в списке всего 1 элемент
                    isList1Exists = true; //теперь список существует
 
                }
                else //если не первый, то ...
                {
                    element->nextl = NULL; //следующего элемента нет, т.к. добавляем в конец
                    UK1->nextl = element; //предыдущий элемент указывает на новый элемент
                    UK1 = element; //указатель на конец - на новый элемент
                }
 
                cout << "Введите новую строку: ";
                fflush(stdin);
                getline(cin, element->str); //считываем новый элемент - строку
 
                do{
                    continueInput = 0;
                    cout << "Хотите ввести еще один элемент? Нажмите 1 или 2 для продолжения" << endl;
                    cout << "1. Да" << endl;
                    cout << "2. Нет" << endl;
                    fflush(stdin);
                    cin >> continueInput;
                    if ((continueInput != '1') && (continueInput != '2'))
                    {
                        system("cls");
                        cout << "Вы ввели неверное число! Попробуйте ещё раз" << endl;
                    }
                } while ((continueInput != '1') && (continueInput != '2'));
            } while (continueInput == '1');
 
            system("cls");
            break;
        case '2':
            system("cls");
            if (isList1Exists == true)  //Если список не пустой
            {
                list1 *element = UN1; //Создаём указатель на начало списка
                do
                {
                    cout << element->str << endl; //Выводим текущий элемент
                    element = element->nextl; //Переводим указатель на следующий элемент
                } while (element != NULL); //Пока этот элемент существует
            }
            else    //Если список пустой - сообщение
                cout << "Список пуст" << endl;
            system("pause");
            system("cls");
            break;
        case '3':
            /*
            ВОТ ТУТ НАДО АЛГОРИТМ ВСТАВЛЯТЬ
 
            */
 
            break;
            case '4':
            exit = true;
            break;
        default:
            system("cls");
            cout << "Вы ввели неверный номер. Попробуйте ещё раз" << endl;
            break;
        }
    }while (!exit);
    return 0;
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.10.2014, 16:18
Ответы с готовыми решениями:

Сформировать массив строк, удалить из него одинаковые строки
собственно сабж. буду очень благодарен тому кто поможет,а то я на грани отчисления,а уроки по c++...

Создать массив строк. Удалить из него одинаковые строки
Мои знания только подошли к теме двумерный массив, указателей и функций. Так что можно программу по...

Сформировать массив строк. Удалить из него одинаковые строки. Сформировать массив строк. Удалить из него К последних строк
Сформировать массив строк. Удалить из него одинаковые строки. Сформировать массив строк. Удалить из...

Задан массив. Получить из него новый массив путем деления элементов каждой из строк первого массива на элемент этой строки
Задан массив А. Получить из него новый массив путем деления элементов каждой из строк первого...

2
Форумчанин
Эксперт CЭксперт С++
8190 / 5040 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
22.10.2014, 16:32 2
Вариант в лоб:
проходиться по всему списку, для каждого элемента проверять, есть ли перед ним узел с таким же значением. Если да, то удалять дубликат.
0
1 / 1 / 0
Регистрация: 05.10.2013
Сообщений: 78
23.10.2014, 07:44  [ТС] 3
Ну вот допустим я нашел одинаковые строки, а каким способом их удалить?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.10.2014, 07:44
Помогаю со студенческими работами здесь

Расположение элементов строк в матрице, при этом повторяющиеся строки исключить.
Здравствуйте! Помогите, пожалуйста, решить задачу: Матрица а вводится построчно непопорядку,...

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

Задан массив Х1, Х2...Хm. Исключить максимальный элемент
1. задан массив Х1, Х2...Хm. Исключить максимальный элемент.

Даны 2 TextBox. Исключить из них одинаковые слова
Предположим имеются два идентичных по структуре тексбокса (мультилайн - тру, скроллбарс -...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru