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

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

19.12.2017, 14:13. Показов 5229. Ответов 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
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.12.2017, 14:13
Ответы с готовыми решениями:

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

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

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

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

5
7375 / 6294 / 2859
Регистрация: 14.04.2014
Сообщений: 27,278
19.12.2017, 14:28 2
Если так искать, то нужно два индекса - начало и конец, чтобы выделять слово. Или используй strtok() для разделения и параллельно ищи короткое слово.
0
0 / 0 / 1
Регистрация: 08.11.2017
Сообщений: 117
19.12.2017, 19:24  [ТС] 3
Как искать? Написала немного еще кода, нашла количество слов. Далее в цикле 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
299 / 208 / 174
Регистрация: 11.05.2016
Сообщений: 655
19.12.2017, 21:37 4
принцип, к примеру, такой:
Кликните здесь для просмотра всего текста
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
7375 / 6294 / 2859
Регистрация: 14.04.2014
Сообщений: 27,278
19.12.2017, 22:08 5
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
299 / 208 / 174
Регистрация: 11.05.2016
Сообщений: 655
19.12.2017, 22:33 6
Мне понадобились костыли)
Кликните здесь для просмотра всего текста
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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.12.2017, 22:33
Помогаю со студенческими работами здесь

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

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

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

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


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

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

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