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

Используя стек подсчитать количество слов, длина которых меньше 3-х символов

20.04.2020, 10:15. Показов 870. Ответов 6
Метки нет (Все метки)

Понимаю, как делать через очередь, но не понимаю, как через стек(вообще не дружу с ними). Задача: Дана символьная строка длиной не более 80 символов, состоящая из слов, разделенных пробелом. Составить программу, которая вводит строку, организует из слов строки однонаправленный список-стек, используя список, подсчитывает количество слов, длина которых меньше 3-х символов, выводит на экран результаты работы. Освободить память, отведенную под размещение элементов списка.
Мой вариант с oчередью :
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
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <string.h>
#include <stdlib.h>
struct list
{
char s[7];
list* pt;
};
int main()
{
int i,a=0,b=0;
char s[80];
char* ptr1, * ptr2;
char res[7];
list* first, *q, *p,*d;
setlocale(0,"russian");
puts("Введите строку не более 80 символов и заканчивающуюся точкой:");
gets_s(s,80);
i = strlen(s);
ptr1 = &s[0];
ptr2 = &s[0];
first = new list;
first->pt = NULL;
while (*ptr1 != ' ')
{
a++;
ptr1 = ptr1 + 1;
}
ptr1 = ptr1 + 1;
if (a <= 7)
{
strncpy_s(res, ptr2, a);
strcpy(first->s, res);
while (*ptr2 != ' ')
ptr2 = ptr2 + 1;
ptr2 = ptr2 + 1;
a = 0;
}
else
{
puts("Строка введена некоректно!");
b = 1;
}
if (b == 0)
{
q = first;
while (*ptr1 != '.')
{
while ((*ptr1 != ' ') && (*ptr1 != '.'))
{
a++;
ptr1 = ptr1 + 1;
}
if (*ptr1 != '.')
ptr1 = ptr1 + 1;
if (a <= 7)
{
strncpy_s(res, ptr2, a);
p = new list;
strcpy(p->s, res);
p->pt = NULL;
q->pt = p;
q = p;
while ((*ptr2 != ' ') && (*ptr2 != '.'))
ptr2 = ptr2 + 1;
if (*ptr2 != '.')
ptr2 = ptr2 + 1;
a = 0;
}
else
{
puts("Строка введена некоректно!");
*ptr1 = '.';
b = 1;
}
}
}
if (b == 0)
{
q = first;
puts("Вывод заданного списка: ");
while (q != NULL)
{
printf("%s", q->s);
printf("\n");
q = q->pt;
}
q = first;
p = first;
while (q->pt != NULL)
{
p = q;
q = q->pt;
}
d = first;
q->pt = d->pt;
p->pt = d;
d->pt = NULL;
first = q;
puts("Вывод измененного списка: ");
while (q != NULL)
{
printf("%s", q->s);
printf("\n");
q = q->pt;
}
}
p = first;
while (p != NULL)
{
q = p;
p = p->pt;
delete q;
}
return 0;
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.04.2020, 10:15
Ответы с готовыми решениями:

В строке символов определить количество слов, в которых длина меньше указанной пользователем
Здравствуйте, нужна ваша помощь. Задачу нужно сделать с использованием темы &quot;Строки...

Подсчитать в строковой матрице количество слов, длина которых превышает 5 символов
Вводится массив К×М из слов. Подсчитать количество слов,размером больше 5 символов.

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

Сформировать стек всех слов, длина которых меньше либо равна 5
Помогите с программой на c++. Дан текст, состоящий не менее чем из 7 слов. Сформировать стек всех...

6
Модератор
Эксперт С++
12126 / 9791 / 5916
Регистрация: 18.12.2011
Сообщений: 26,268
20.04.2020, 10:36 2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <string>
#include <sstream>
#include <stack>
using namespace std;
int main()
{
    stack<string> St;
    string str="11 44444444 fffff gggg 2 gg",t;
    //getline(cin, str);
    istringstream ss(str);
    while (ss >> t)
        St.push(t);
    int count = 0;
    do
    {
        if (St.top().size() < 3)
            count++;
        St.pop();
    }while (!St.empty());
    cout << count<<endl;
    system("pause");
}
0
2414 / 1160 / 429
Регистрация: 08.11.2016
Сообщений: 3,232
20.04.2020, 11:44 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
#include <iostream>
#include <stack>
 
using namespace std;
 
int main()
{
    char in_str[80];
    stack<char *> str_stack;    
    cout << "input string: ";
    gets_s(in_str, 80);
    for (int i = 0, pos = 0; ; i++)
    {
        if (in_str[i] == ' ' || in_str[i] == '\0')
        {
            char *buf = new char[i - pos + 1];
            for (int k = pos; k < i; k++)
                buf[k - pos] = in_str[k];
            buf[i - pos] = '\0';
            str_stack.push(buf);
            pos = i + 1;
            if (in_str[i] == '\0')
                break;
        }
    }
 
    int count = 0;
 
    while (str_stack.size())
    {
        int len = 0;
        for (int i = 0; str_stack.top()[i] != '\0'; i++)
            len++;
        if (len < 3) count++;
        delete[] str_stack.top();
        str_stack.pop();
    }
    cout << "count = " << count << endl;
    system("pause");
    return 0;
}
0
3660 / 2997 / 828
Регистрация: 25.03.2012
Сообщений: 11,045
Записей в блоге: 1
20.04.2020, 11:49 4
zss, в чём тайный смысл использования стека в вашей задасе?
0
Модератор
Эксперт С++
12126 / 9791 / 5916
Регистрация: 18.12.2011
Сообщений: 26,268
20.04.2020, 12:03 5
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
в чём тайный смысл
В условии задания написано:
Цитата Сообщение от Godness_Carp Посмотреть сообщение
организует из слов строки однонаправленный список-стек,
0
3660 / 2997 / 828
Регистрация: 25.03.2012
Сообщений: 11,045
Записей в блоге: 1
20.04.2020, 14:03 6
zss, есть множество хороших задач, в которых использование стека оправдано. На них и надо тренироваться, а не выдумывать искусственные примеры со стеком "чтоб было".
Чего там бывает... польская запись и вообще парсинги. Эмуляция рекурсивных алгоритмов, много не вспомнить.
Очереди мне знакомы больше, их наоборот во многие алгоритмы пихают, самое простое это распределённый по времени приём и обработка данных...
Короче вот на этих задачах и нужно изучать структуры данных, а не высасывать их искусственно.
Взли банальные Ханойские башни - они сами по себе демонстрируют "стек", а если ещё решение головоломки с применением стека задать сделать - вообще супер будет!
0
Модератор
Эксперт С++
12126 / 9791 / 5916
Регистрация: 18.12.2011
Сообщений: 26,268
20.04.2020, 15:22 7
Это уже вопрос к тому, кто задал его, а к ТС.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.04.2020, 15:22
Помогаю со студенческими работами здесь

Удаление из строки слов, длина которых меньше К символов
Удалить слова из заданного текста, длина которых меньше К символов. Добавлено через 17 часов 56...

Вывести на экран количество букв в 5-й строке и количество строк в которых длина меньше 10 символов
Програма должна считывать с клавиатуры текстовые строки и записывать их в массив до тех пор, пока...

Сформировать строку, состоящую из всех слов исходной строки, длина которых меньше восьми символов
Сформировать строку, состоящую из всех слов исходной строки, длина которых меньше восьми символов.

Определить количество слов в строке, длина которых меньше заданного числа К
Помогите пожалуйста с задачкой... ПЛИЗ... Дана строка текста, в которой слова разделены пробелами....

Вывести количество слов в строке, длина которых меньше заданного числа к
дана строка текста,в которой слова разделены пробелами.Вывести колич слов в строке,длина которых...

В заданном тексте определить количество строк, длина которых меньше 40 символов
Нужна помощь. В заданном тексте определить количество строк, длина которых меньше 40 символов.


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

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

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