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

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

Войти
Регистрация
Восстановить пароль
 
Priorzivil
0 / 0 / 0
Регистрация: 11.03.2013
Сообщений: 11
#1

Удалить каждое последующее вхождение символа если он встречался до этого - C++

11.03.2013, 18:07. Просмотров 226. Ответов 0
Метки нет (Все метки)

Народ меня тут 11 задач мне нужно их подробно прокомментировать какая строчка что делает(пример первая задача) помогите плиз кому не сложно хотя бы по одной задачке буду очень благодарен

Задача 4 Списки

В файле input.txt содержатся символы создать из этих символов список. Удалить каждое последующее вхождение символа если он встречался до этого.
Input:
Код
= + - ) ( + ? _ - )
Код программы
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
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("input.txt");
ofstream out("output.txt");
class spisok // создаем класс spisok
{
private:
    struct elem
    {
        char inf; 
        elem *next;
        elem (char x,elem *p):inf(x), next(p){}
    };
    elem *head, *tail;
public:
    spisok():head(0),tail(0){};
    bool empty()
    {
        return head==0;
    }
    void push_head(char value)
    {
        head=new elem(value, head);
    }
    void push_tail(char value)
    {
        elem *newptr=new elem(value, 0);
        if(head==0&&tail==0)
            head=tail=newptr;
        else
        {
            tail->next=newptr;
            tail=newptr;
        }
    }
            
    void print()
    {
        if(head!=0)
        {
 
            elem *r=head;
            while(r!=NULL)
            {
                out<<r->inf<<' ';
                r=r->next;
            }
        }
        else out<<"empty spisok"<<endl;
    }
    void findRemove(char i,elem *t)
    {
        elem *r=t;
        while(r->next!=NULL)
        {
            if((r->next)->inf==i)
                remove(r);
            else r=r->next;
        }
    }
    void remove (elem *&r)
    {
        elem *t=r->next;
        r->next=r->next->next;
        delete t;
 
    }
    void removeAll()
    {
        //out<<head->inf<<endl;
        //out<<head->next->inf<<endl;
        //out<<head->next<<endl;
        //out<<head->next->next<<endl;
        for(elem *t=head; t!=NULL; t=t->next)
        {
            //out<<"*";
            findRemove(t->inf,t);
        }
    }
};
 
int main()
{
    spisok t;
    char n;
    while(in>>n)
    {
        t.push_tail(n);
    }
    out<<"Spisok:"<<endl;
    t.print();
    t.removeAll();
    out<<endl;
    out<<"Spisok s udaleniem"<<endl;
    t.print();
    in.close();
    out.close();
    system("pause");
    return 0;
}
output
Код
Spisok:
= + - ) ( + ? _ - ) 
Spisok s udaleniem
= + - ) ( ? _
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.03.2013, 18:07     Удалить каждое последующее вхождение символа если он встречался до этого
Посмотрите здесь:

C++ Из файла ввести слово и найти в нём последнее вхождение заданного символа, если он есть
C++ Удалить из строки каждое вхождение подстроки
Удвоить каждое вхождение заданной буквы в строке C++
C++ Ввести строку символов, если ее длина четная, удалить 2 первых и 2 последних символа.
Дан символ и строка, удвоить каждое вхождение символов в строку!!!! C++
Удвоить каждое вхождение символа С в строку S C++
C++ Заменить в тексте каждое вхождение...
Удвоить каждое вхождение символа в строке C++
В предложении удалить первое вхождение “w”, если такое есть C++
C++ Дан символ C и строка S .Удвоить каждое вхождение символа С в строку S
C++ Заменить каждое вхождение <i> на <курсив>, а каждое вхождение </i> на <конец курсивах>
C++ Заменить в числе каждое вхождение одной цифры на другую

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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