С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 11.11.2016
Сообщений: 8
1

Динамические списки

19.03.2017, 21:10. Показов 700. Ответов 1

Author24 — интернет-сервис помощи студентам
Здравствуйте. Написан мною код по заданию: из введенных слов составить списки, в 1 списке все четные слова, во 2 - нечетные.
C++ (Qt)
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
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
#include <stdio.h>
#include <conio.h>
#include <locale.h>
#include <stdlib.h>
#include <string.h>
struct zap 
{
    char *word;
    zap *p;
};
void main()
{
    int i, j, l, count=0;
    setlocale(0, "russian");
    puts("Введите слова через пробел");
    char *string, *ptrstr1;
    string=new char[100];
    gets(string);
    zap word1, word2, *first1, *first2, *r1, *r2;
    char seps[]=".,-!?\n", *token, *ptrstr;
    token=strtok(string, seps);
    ptrstr=new char[100];
    ptrstr=token;
    bool h=false;
    if (token!=NULL)
    {
        token=strtok(NULL, seps);
        while (token!=NULL)
        { 
            strcat(ptrstr, token);//ptrstr=ptrstr+token;
            token=strtok(NULL, seps);
            h=true;
        }
    }
    if (!h) 
    {
        puts("Слова введены верно");
    }
    else
    {puts("Слова без знаков: ");
        puts(ptrstr);}
    int n1=0, n2=0;
    char prob[2]=" ";
    r1=new zap;
    token=strtok(ptrstr, prob);
    r1->word=token;
    r1->p=NULL;
    count++;
    n1++;
    r2=NULL;
    token=strtok(NULL, prob);
    if (token!=NULL)
    {
        r2=new zap;
        r2->word=token;
        r2->p=NULL;
        count++;
        token=strtok(NULL, prob);
        n2++;
    }
    first1=r1;
    first2=r2;
    if (token!=NULL && count==2)
    {
        while (token!=NULL)
        {
            if (count%2==0)
            {
                //1 spisok
                printf("Указатель 1 списка - %p\n", r1);
                r1=new zap;
                r1->word=token;
                puts(r1->word);//-
                r1->p=NULL;
                token=strtok(NULL, prob);
                r1=r1->p;
                //r1=NULL;
                count++;
                n1++;
            }
            else
            {
                //2 spisok
                printf("Указатель 2 списка - %p\n", r2);
 
                r2=new zap;
                r2->word=token;
                puts(r2->word);//-
                r2->p=NULL;
                token=strtok(NULL, prob);
                r2=r2->p;
                //r2=NULL;
                count++;
                n2++;
            }
        }
    }
    //Вывод списков
    r1=first1;
    r2=first2;
    int gl1=0, gl2=0;
    if (r1==NULL)
        puts("Первый список пуст");
    else
        puts("Вывод первого списка");
        for (i=1; i<=n1; i++)//while (r1!=NULL)//???while
        {
            puts(r1->word);//если слов введено больше 2, то при выводе, начиная со второго слова, начинает "ругаться"
            if ((r1->word[0]=='a') || (r1->word[0]=='e') || (r1->word[0]=='i') || (r1->word[0]=='o') || (r1->word[0]=='u') || (r1->word[0]=='y'))
                gl1++;
            r1=r1->p;
        }
    if (r2==NULL)
        puts("Второй список пуст");
    else
    {
        puts("Вывод второго списка");
        for (i=1; i<=n2; i++)//while (r2!=NULL)
        {
            puts(r2->word);//и здесь "ругается" по тем же причинам
            if (r2->word[0]=='a' || r2->word[0]=='e' || r2->word[0]=='i' || r2->word[0]=='o' || r2->word[0]=='o' || r2->word[0]=='y')
                gl2++;
            r2=r2->p;
        }
    }
    printf("Количество слов в первом списке, начинающихся на гласную букву: %d\nКоличество слов во втором списке, начинающихся нагласную букву: %d\n", gl1, gl2);
    if (gl1==gl2)
        puts("Количество слов, начинающихся на гласную, в обоих списках одинаково");
    else
        if (gl1>gl2)
            puts("В первом списке слов, начинающихся на гласную, больше, чем во втором");
        else
            puts("Во втором списке слов, начинающихся на гласную, больше, чем в первом");
    while (first1!=NULL)
    {
        r1=first1->p;
        delete first1;
        first1=r1;
    }
    while (first2!=NULL)
    {
        r1=first2->p;
        delete first2;
        first2=r2;
    }
    delete[] ptrstr;
    puts("Нажмите любую клавишу для продолжения...");
    _getch();
}
Итак, проблема в том, что, когда я пытаюсь обратиться к следующему списку при выводе, он говорит мне, что указатель на следующий список нулевой, т.о. я не могу вывести все слова, а вывожу только первые слова от каждого списка. Хотя при создании списка все вроде нормально идет..
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.03.2017, 21:10
Ответы с готовыми решениями:

Динамические списки
Пишу курсовую работу про динамические списки, и хотелось узнать мнение специалистов про мою функцию...

Динамические списки
Задание: разработать функцию перестановки заданного элемента в начало списка. Есть библиотека, на...

Динамические списки
Всем привет. Подскажите пожалуста идеи. Дано стек, разработать функцию, которая формирует два новых...

Динамические списки, жуть
Дали мне задание. Моделирование баз данных автомобилей с использованием динамическим списком. Я...

1
1272 / 1029 / 470
Регистрация: 25.12.2016
Сообщений: 3,333
21.03.2017, 18:59 2
Очень тяжело воспринимать такую программу, где код идёт сплошной стеной. Её бы немного структурировать, разбить на функции с говорящими именами. Может тогда и ошибка исчезнет или станет очевидной.
0
21.03.2017, 18:59
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.03.2017, 18:59
Помогаю со студенческими работами здесь

Динамические структуры: списки
Создать линейный однонаправленный список из вещественных чисел. Удалить из списка элемент перед...

Динамические массивы и списки данных
1.Дана матрица А(n´n). Найти номера строк и столбцов, элементы которых образуют возрастающую...

Динамические структуры данных. Списки
Ребят, срочно нужна помощь, помогите пожалуйста, кто чем может! Задание: В деке задать слово....

Динамические Списки!!!! Очень нужно...!
Помогите пожалуйста решить задачи на Си....горит стипендия(( Задача 1. Описать функцию, которая...

Динамические структуры: линейные списки
Люди помогите:wall: Дали задачу из учебника Павловской Вот вроде смотрю как в учебнике написано...

Линейные односвязные списки, динамические массивы
Помогите пожалуйста Читая целые числа из текстового файла, создать линейный односвязный список...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru