Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.90/29: Рейтинг темы: голосов - 29, средняя оценка - 4.90
0 / 0 / 1
Регистрация: 08.11.2017
Сообщений: 117

Строки. Поиск слова минимальной длины, вывод этой длины, номер слова и само слово

19.12.2017, 14:13. Показов 6251. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как организовать решение такой задачи? Может как-то через создание массивов, в ячейках которых будут номера слов и числа количества букв или есть способ проще?
Вот наброски начала программы. Помогите, пожалуйста. =(


C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <conio.h>
using namespace std;
 
void main()
{
    setlocale(LC_ALL, "Rus");
 
    char st[255];          
    cin.getline(st, 225);         //"Друзья удваивают наши радости и разделяют все наши горести."
    int Numb_of_word = 0;
    int Length_of_word;
    for (int i = 0; i < strlen(st); i++)
    {
        if (st[i] == ' ')
            Length_of_word = i + 1;
            ++Numb_of_word;
    }
 
    _getch();
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
19.12.2017, 14:13
Ответы с готовыми решениями:

Все слова, длина которых больше в 2 раза длины слова max длины, заменить на слово min длины
подскажите пожалуйста в чем тут ошибка {Дан текст. Все слова, длина которых больше в 2 раза длины слова минимальной длины,...

Строки: Вывести на экран порядковый номер слова минимальной длины
Вобщем сабж такой &quot;Дана строка символов, состоящая из произвольного текста на английском языке, слова разделены пробелами. Вывести на экран...

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

5
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
19.12.2017, 14:28
Если так искать, то нужно два индекса - начало и конец, чтобы выделять слово. Или используй strtok() для разделения и параллельно ищи короткое слово.
0
0 / 0 / 1
Регистрация: 08.11.2017
Сообщений: 117
19.12.2017, 19:24  [ТС]
Как искать? Написала немного еще кода, нашла количество слов. Далее в цикле for, думаю, будет еще один цикл for, в котором с помощью метода пузырька искать наименьшую длину слова, а как это сделать, чтобы на внешний цикл это не влияло, не понимаю, и еще, насчет функции strtok(), как ей пользоваться для вывоода определенного слова, тоже не совсем ясно. =(

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
#include <iostream>
#include <conio.h>
 
using namespace std;
 
void main()
{
    setlocale(LC_ALL, "Rus");
    char str[255] = "Друзья удваивают наши радости и разделяют все наши горести";
    //cin.getline(str,255);
    int n = 0;
    for (int i = 0; i < strlen(str); i++)
    {
        if (str[i] == ' ') n++;
    }
    int Words = ++n;
    cout << Words << '\n';
 
    int Numb_of_word = 0;
    int Length_of_word;
    for (int i = 0; i < strlen(str); i++)
    {
 
        if (str[i] == ' ')
        ++Numb_of_word;
        else 
        Length_of_word = i + 1;
 
        if (Numb_of_word >= 2)
 
        for(int i = 0; i < Words; i++)
                ...
 
    }
 
    // синтаксис strtok() и почему-то ошибка E0020  идентификатор "Delimiters" не определен 
    char *Delimiters = " ";
    char *ptr;
    ptr = strtok(str, Delimiters);
    if (ptr)
    {
        cout << (ptr); cout << "\n";
    }
    while (ptr)
    {
        ptr = strtok(NULL, Delimiters);
        if (ptr) { cout << (ptr); cout << "\n"; }
    }
 
    _getch();
}
0
 Аватар для Herji
299 / 208 / 174
Регистрация: 11.05.2016
Сообщений: 655
19.12.2017, 21:37
принцип, к примеру, такой:
Кликните здесь для просмотра всего текста
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
    setlocale(LC_ALL, "Rus");
 
    char st[255] = " ффф bz ввв language ееее ёё:ъъъ кккк.,,.X";          
   // cin.getline(st, 225);         //"Друзья удваивают наши радости и разделяют все наши горести."
    int Numb_of_word = 0;
    int count = 0;
    int Length_of_word = 255;
    int temp_length = 0;
    int index = 0;
 
    for (int i = 0; i < 254; i++)
    {
        if(std::isalpha(st[i]))
        {
            temp_length++;
            if(!(std::isalpha(st[i+1])))
            {
                count++;
                if(Length_of_word > temp_length) 
                {
                    Length_of_word = temp_length;
                    index = i-temp_length+1;
                    Numb_of_word = count;
                }
                temp_length = 0;
            }
        }
    }
 
    std::cout <<  "Min len w = " << Length_of_word;
    std::cout <<  "\nNumb of word = " << Numb_of_word << "\n Word is: ";
    for(int i=0; i<Length_of_word; i++) std::cout << st[index+i];


только вместо isalpha что-то рукотворное сотворю чуть позже, не нравится мне как оно иногда работает
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
19.12.2017, 22:08
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    char Delimiters[] = " .";
    char *ptr, *w = NULL;
    int i = 0, wi = 1;
 
    ptr = strtok(str, Delimiters);
    w = ptr;
    while (ptr)
    {
        if (strlen(ptr) < strlen(w)) { w = ptr; wi = i; }
        ptr = strtok(NULL, Delimiters);
        ++i;
    }
 
    cout << strlen(w) << endl << wi << endl << w << endl;
0
 Аватар для Herji
299 / 208 / 174
Регистрация: 11.05.2016
Сообщений: 655
19.12.2017, 22:33
Мне понадобились костыли)
Кликните здесь для просмотра всего текста
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
#include <iostream>
#include <conio.h>
#include <Windows.h> //костыли для правильной работы с кириллицей
 
using namespace std;
 
bool is_alpha(char a)  // Нужно больше костылей!
{
    if(a >= 'A' && a <= 'Z') return true;
    if(a >= 'a' && a <= 'z') return true;
    if(a >= 'А' && a <= 'я') return true;
    if(a == 'Ё' || a == 'ё') return true;
 
    return false;
}
 
int main()
{
    setlocale(LC_ALL, "Rus");
    
    const int buff_size = 255;
 
    char st[buff_size];
    
    char buf[buff_size]; //костыли для правильной работы с кириллицей
    cin.getline(buf, buff_size);
    OemToCharA(buf, st); //костыли для правильной работы с кириллицей
 
    int Numb_of_word = 0;
    int count = 0;
    int Length_of_word = 255;
    int temp_length = 0;
    int index = 0;
 
    for (int i = 0; i < (buff_size-1) && st[i]!='\0'; i++)
    {
        if(is_alpha(st[i]))
        {
            temp_length++;
            if(!(is_alpha(st[i+1])))
            {
                count++;
                if(Length_of_word > temp_length) 
                {
                    Length_of_word = temp_length;
                    index = i-temp_length+1;
                    Numb_of_word = count;
                }
                temp_length = 0;
            }
        }
    }
 
    if(!Numb_of_word)
    {
        std::cout << "No words in string\n";
    } else {
        std::cout <<  "Min len w = " << Length_of_word;
        std::cout <<  "\nNumb of word = " << Numb_of_word << "\n Word is: ";
        for(int i=0; i<Length_of_word; i++) std::cout << st[index+i];
    }
 
    _getch();
    return(0);
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
19.12.2017, 22:33
Помогаю со студенческими работами здесь

Распечатать все слова строки, которые начинаются на ту же букву, что и слово минимальной длины (последнее по порядку)
Распечатать все слова строки, которые начинаются на ту же букву, что и слово минимальной длины (последнее по порядку).

Порядковый номер слова минимальной длины
Дана строка символов, состоящая из произвольного текста, слова разделены пробелами. Вывести на экран порядковый номер слова минимальной...

Вывести на экран порядковый номер слова минимальной длины
Дана строка символов, состоящая из произвольного текста на английском языке, слова разделены пробелами. Вывести на экран порядковый номер...

Вывести на экран порядковый номер слова минимальной длины...
Доброго времени суток, помогите пожалуйста написать код Дана строка символов, состоящая из произвольного текста, слова разделены...

Определить в строке слово (или слова) минимальной длины
1)Дана матрица А размерностью n*n. Найти скалярное произведении строки в котором находиться максимальный элемент матрицы на столбец с...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru