Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Вероника99
5 / 5 / 5
Регистрация: 16.12.2013
Сообщений: 461
#1

Удаление символа 'Е' перед 'N' - C++

29.09.2015, 18:03. Просмотров 209. Ответов 3
Метки нет (Все метки)

Здравствуйте. Задача такая:в циклическом односвязном списке удалить все буквы "Е",которые находятся перед "N".
Как можно было бы правильно реализовать такое? Спасибо
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void Delete()
{
    Node *p1=Head; //указатели на первый элемент списка
    Node *p2=Head;
    char *c1='Е',*c2='N';//Компилятор ругается на приведение типов.
 
    int s=0;
    for(p1=Head;p1;p1=p1->next)
    {
        if(p1->x==c1&&p1->next==c2) //ругается на эту строку
        {
            cout<<p1->x;
        }
    }

http://www.cyberforum.ru/cpp-beginners/thread1934319.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.09.2015, 18:03
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Удаление символа 'Е' перед 'N' (C++):

В строке вставить перед символом «+» три символа «***»
Введите строку. По всей строке вставьте перед символом «+» три символа «***»....

Перед каждым словом поставить три символа «---»
Введите строку. Преобразуйте строку таким образом, чтобы перед каждым словом...

Вставить строку перед каждым вхождением символа.
Дан символ С и строки S,S0. Перед каждым вхождением символа С в строку S...

Вставить строку перед каждым вхождением заданного символа
Даны строки S1, S2 и символ C. Перед каждым вхождением символа C в строку S1...

Ошибка перед удаление индекса
#include &lt;iostream&gt; #include &lt;ctime&gt; #include &lt;cstdlib&gt; template...

3
_Valera_
489 / 371 / 136
Регистрация: 27.01.2015
Сообщений: 1,588
29.09.2015, 19:02 #2
Цитата Сообщение от Вероника99 Посмотреть сообщение
char *c1='Е',*c2='N';//Компилятор ругается на приведение типов
я б тоже ругался, если бы в меня , ссылку, присваивали константу.

Цитата Сообщение от Вероника99 Посмотреть сообщение
if(p1->x==c1&&p1->next==c2) //ругается на эту строку
* * * * {
* * * * * * cout<<p1->x;
* * * * }
* * }
надо весь код, но думаю что поле next это ссылка типа Node, а ей присваивают *char
0
Вероника99
5 / 5 / 5
Регистрация: 16.12.2013
Сообщений: 461
30.09.2015, 13:42  [ТС] #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
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
struct Node {
  char *x; // поле данных
  Node *Next; // указатель на следующий элемент
};
int size=0;
Node *Head,*Tail;
void Add(char *x)
{
....
}
Node* Delete(Node *p1)
{
    Node *p3=Head;
    while(p3->Next!=p1)
                p3=p3->Next;
            p3->Next=p1->Next;
            delete p1;
            return p3;
}
void check()
{
Node *p1=Head;
    Node *p2=Head;
    Node *p3=Head;
    Node *p4=Head;
    char *b;
    char *c;
    int s=0;
 
    while(s<size)
     { 
    
         c=p1->x; //присваиваем переменной значение поточного элемента 
         p2=p1->Next;
         b=p2->x; //присваиваем переменной значение следующего элемента 
    
         if(((strcmp(c,"E"))&&(strcmp(b,"N")))==0)//сравниваем
        {   
            Delete(p1); //Удаление элемента
            //p1=p1->Next;
            //delete p1;
            cout<<"Result"<<endl;
            cout<<endl;
         }
         p1=p1->Next;
         s++;
    }
}
...
int _tmain(int argc, _TCHAR* argv[])
{
    
    Add("H");
    Add("E");
Add("N");
 
Show();
    Check();
    
    return 0;
}
Добавлено через 12 часов 26 минут
Никто не знает почему на delete компилятор ругается?(
0
Геомеханик
784 / 591 / 937
Регистрация: 26.06.2015
Сообщений: 1,405
01.10.2015, 08:02 #4
Вероника99, не мучайся вот накидал тебе.
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
120
121
122
123
124
125
126
#include <iostream>
 
struct cnode {
    char   ch;
    cnode* next;
};
 
struct clist {
    cnode* head;
    cnode* tail;
};
 
void clist_init(clist* lst);
bool clist_add(clist* lst, char ch);
void clist_println(std::ostream& _out, const clist* lst);
void clist_clear(clist* lst);
 
//удаление символа(ов) - fch, перед символом - lch
void clist_delete(clist* lst, char fch, char lch){
    cnode* p, *a, *b, *t, *prev;
    if(lst->head == NULL)
        return;
 
    p = lst->head;
    do {    
        if(p->ch == fch){
            b = p;
            do {
                if(b->next->ch == lch){
                    b = b->next;
                    break;
                }
                b = b->next;
            } while((b != lst->head) && (b->ch == fch));
 
            if(b->ch == lch){
                a = p;
                if(p == lst->head){
                    lst->head = b;
                    lst->tail->next = b;
                } else {
                    if(b == lst->head){
                        lst->tail = prev;
                        lst->tail->next = lst->head;
                    } else
                        prev->next = b;
                }
 
                while(a != b){
                    t = a;
                    a = a->next;
                    delete t;
                }
                p = prev = b;
            }
        }
        prev = p;
        p    = p->next;
    } while(p != lst->head);
}
 
 
int main(void){
    clist lst;
    clist_init(&lst);
 
    char s[] = "EEENENEEEEEEN, [EEEN] <EN>EEENEE";
    for(const char* p = &s[0]; *p; ++p)
        clist_add(&lst, *p);
 
    clist_println(std::cout, &lst);
    clist_delete(&lst, 'E', 'N');
    clist_println(std::cout, &lst);
 
    clist_clear(&lst);
    return 0;
}
 
//инициализация кольцевого-списка
void clist_init(clist* lst){
    lst->head = lst->tail = NULL;   
}
 
//добавление в конец кольцевого-списка
bool clist_add(clist* lst, char ch){
    cnode* p = new (std::nothrow) cnode();
    if(p != NULL){
        p->ch = ch;
        if(lst->head == NULL){
            p->next   = p;
            lst->head = lst->tail = p;
        } else {
            p->next = lst->head;
            lst->tail->next = p;
            lst->tail = p;
        }
    }
    return (p != NULL);
}
 
//вывод кольцевого-списка в выходной поток
void clist_println(std::ostream& _out, const clist* lst){
    const cnode* p, *e;
    if(lst->head != NULL){
        p = e = lst->head;
        do {
            _out << p->ch;
            p = p->next;
        } while(p != e);
        _out << std::endl;
    }
}
 
//уадление кольцевого-списка
void clist_clear(clist* lst){
    cnode* t, *e, *p;
    if(lst->head != NULL){
        p = e = lst->head;
        do {
            t = p;
            p = p->next;
            delete t;
        } while(p != e);
        lst->head = lst->tail = NULL;
    }
}
Пример работы кода
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.10.2015, 08:02
Привет! Вот еще темы с решениями:

Удаление символа
как удалить последний символ в файле ???

удаление символа '\n' в string
Здравствуйте! Я видимо наверно жутко туплю, но я никак не пойму почему при...

удаление символа из предложения
есть такой часть класса, который удаляет символ из предложение: char*...

Удаление последенего символа
У меня есть строковая переменная. Как мне удалить из нее самый последний символ?


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

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

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