Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
xenocide
0 / 0 / 1
Регистрация: 06.01.2010
Сообщений: 7
1

Считать количество слов в каждом предложении и вывести на экран самое длинное предложение

17.01.2010, 00:43. Просмотров 811. Ответов 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
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
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
 
int main()
{
    char *s = (char*) malloc(255 * sizeof(char));     
    int start=0,max=0,i,t;
 
    printf("Vvedite text: ");
    gets(s);
 
    for (i=0; i<strlen(s)-1; i++)
        if (s[i] == '.' && s[i+1] == ' ')      
        {
            for (t=i+1; t<strlen(s)-1; t++)      // 1) Зачем вводится этот цикл?
                s[t]=s[t+1];
 
            s[strlen(s)-1]='\0';
        }
 
    int old=0;
    for (i=0; i<strlen(s); i++)
    {
        if (s[i]=='.')
        {
            if (i-old>max)          // 2) Для чего вводится переменная old и start, и происходит присвоение?
            {
                max=i-old;
                start=old;
            }
 
            int words=1;
 
            for (t=old; t<i; t++)
                if (s[t]==' ')
                    words++;
 
            printf("Kolichestvo slov v tekush4em predlozhenii: %d\n", words);
 
            old=i;
        }
    }
 
    printf("Samoe dlinnoe predlozhenie: ");
    for (i=start; i<start+max; i++)    // 3) max - это индекс последнего эл-та в самом длинном предложении?
        printf("%c", s[i]);
    printf("\n");
 
    old=0;
    for (i=0; i<strlen(s); i++)
        if ((s[i]==' ' || s[i]=='.' || i==strlen(s)-1))
        {
            if ( (s[i-2]=='a' || s[i-2]=='o' || s[i-2]=='e' || s[i-2]=='u' || s[i-2]=='i') )
            {
                printf("Tekush4ee slovo s predposlednej glasnoj: ");
                for (t=old; t<i; t++)
                    printf("%c", s[t]);    
                printf("\n");
 
                for (t=old; t<strlen(s)-i+old; t++)   // 4) А с этим циклом вовсе не ясно, что к чему прибавляется и отнимается? 
                    s[t]=s[t+i-old+1];
                s[strlen(s)-i+old]='\0';
            }
 
            old=i+1;
        }
 
    printf("Predlozhenie posle ydalenija slov: ");
    for (i=0; i<strlen(s); i++)
        printf("%c", s[i]);
 
    return 0;
}

Если возможно - помогите. Заранее спасибо)
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.01.2010, 00:43
Ответы с готовыми решениями:

Найти в каждом предложении самое длинное слово и вывести его
Заданы 2 предложения в файле my.txt. Нужно найти в каждом предложении самое длинное слово и вывести...

Вывести на экран самое длинное предложение
С клавиатуры вводиться текстовая строка.Составить программу которая 1)выводит на экран самое...

Вывести на экран самое длинное предложение
Просьба помочь,и если не трудно немного объяснить,то текстовые рядки даются туго...С клавиатуры...

Необходимо найти в заданном предложении самое длинное слово и вывести на экран
Пожалуйста, помогите найти тут ошибки. Язык -си #include&lt;stdio.h&gt; #include &lt;stdlib.h&gt; int...

Как сделать чтоб в тексте каждое предложение отделялось двумя пробелами и в каждом предложении искалось самое короткое слово
#include &lt;stdio.h&gt; #include &lt;string.h&gt; #include &lt;conio.h&gt; #include &lt;stdlib.h&gt; #include...

2
Bloodykeeper
This party getting crazy!
78 / 64 / 1
Регистрация: 22.09.2009
Сообщений: 427
17.01.2010, 00:51 2
блин...голова немного уже не варит, со вторым помогу. Олд- это твоя так сказать старая часть, Макс- самое длинное предложение, и этой старой части присваивается Макс значение. Как присваивается?- Написано ниже комментария. вроде бы так...могу ошибатся конечно, устал очень, ну и я не такой уж профи
1
xenocide
0 / 0 / 1
Регистрация: 06.01.2010
Сообщений: 7
17.01.2010, 22:42  [ТС] 3
Спасибо
Но все-таки, может еще кто чего подскажет?

Добавлено через 12 часов 45 минут
Спасибо за внимание. Разобралась сама. Решение с необходимыми объясняющими комментариями прилагаю на всякий случай
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
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
 
int main()
{
        char *s = (char*) malloc(255 * sizeof(char));     //Выделение памяти под текстовый массив
        int start=0,max=0,i,t;
 
        printf("Vvedite text: ");
        gets(s);
 
        for (i=0; i<strlen(s)-1; i++)
                if (s[i] == '.' && s[i+1] == ' ')      //Поиск сочетания точек с пробелами, т.е. поиск разделителей предложений, где i - номер точки, i+1 - номер пробела
                {
                        for (t=i+1; t<strlen(s)-1; t++)      //Перебор элементов следующих за точкой начиная с пробела (т.е. от начала каждого предложения) 
                                s[t]=s[t+1];  //Удалене пробелов между предложениями (присвоение пробелу после точки значения последующего символа и т.д., т.е. сдвиг всех элементов на 1 влево в сторону пробела между предложениями
 
                        s[strlen(s)-1]='\0';  
                }
 
        int old=0;
        for (i=0; i<strlen(s); i++)
        {
                if (s[i]=='.')  // Поиск разделителей предложений, т.е. точек
                {
/*Поиск максимального по длине предложения (i-old - это длина предложения)*/
                        if (i-old>max)          // Сравнение длины предложения с максимумом
                        {
                                max=i-old;     //В случае если длина предложения превышает максимум, присвоение максимуму величины текущего предложения
                                start=old; //Присвоение переменной "старт" номера начального элемента самого длинного предложения
                        }
 
                        int words=1; //Присвоение начального значения = 1 счетчику слов в текущем предложении
 
                        for (t=old; t<i; t++) //Перебор элементов от начала каждого предложения до его конца (т.е. до точки) 
                                if (s[t]==' ') //Поиск пробелов в текущем предложении (т.е. поиск разделителей слов)
                                        words++; //Увеличение счетчика слов на 1 в случае если найден пробел (т.к. пробелов всегда на 1 меньше чем слов, поэтому начальное значение счетчика уже изначально =1);
 
                        printf("Kolichestvo slov v tekush4em predlozhenii: %d\n", words); // Вывод на экран количества слов в текущем предложении
 
                        old=i; //Переход к следующему по порядку предложению
                }
        }
 
        printf("Samoe dlinnoe predlozhenie: ");
        for (i=start; i<start+max; i++)    // Перебор элементов от начала до конца самого длинного предложения (start+max - конечный символ самого длинного предложения)
                printf("%c", s[i]); // Вывод на экран самого длинного предложения
        printf("\n");
 
/*Поиск и удаление из предложений слов с предпоследней гласной*/
        old=0;
        for (i=0; i<strlen(s); i++)   //Перебор всех элементов текста
                if ((s[i]==' ' || s[i]=='.' || i==strlen(s)-1)) //Поиск разделителей слов (пробелов, точек, последнего слова)
                {
                        if ( (s[i-2]=='a' || s[i-2]=='o' || s[i-2]=='e' || s[i-2]=='u' || s[i-2]=='i') ) //В случае если разделитель слов (последнее слово) найдены, проверка не является ли гласной его предпоследняя буква
 
/*Вывод на экран слов с предпоследней гласной*/
 
                        {
                                printf("Tekush4ee slovo s predposlednej glasnoj: ");
                                for (t=old; t<i; t++)   //Перебор элементов от начала до конца каждого слова
                                        printf("%c", s[t]); //Вывод на экран слова   
                                printf("\n");
 
/*Удаление слов с предпоследней гласной*/
                                for (t=old; t<strlen(s)-i+old; t++)   
                                        s[t]=s[t+i-old+1]; //Удаление слов с предпоследней гласной путем сдвига элементов стоки на величину слова с предпоследней гласной (i-old = длина слова) - на место начала слова с предпоследней гласной переносим начало обычного слова 
                                s[strlen(s)-i+old]='\0'; //Конец массива сдвигается на величину убранных слов с предпоследнйе гласной
                        }
 
                        old=i+1; //Переход к следующему слову
                }
 
        printf("Predlozhenie posle ydalenija slov: "); //Вывод на экран текса после удаления требуемых слов
        for (i=0; i<strlen(s); i++)
                printf("%c", s[i]);
 
        return 0;
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.01.2010, 22:42

Найти самое длинное слово и вывести предложение большиыми буквами
Вот у меня есть программа. При вводе нескольких предложений программа находит самое длинное слово и...

Найти в предложениях самое длинное слово, и вывести предложение с этим словом большими буквами
Как программу для следующей задачи: Ввести несколько предложений, найти в этих предложениях самое...

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


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

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

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