Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.56/18: Рейтинг темы: голосов - 18, средняя оценка - 4.56
0 / 0 / 1
Регистрация: 30.11.2015
Сообщений: 31
1

Подсчитать количество слов в тексте, которые заканчиваются на гласную букву

31.05.2016, 23:37. Показов 3606. Ответов 6
Метки нет (Все метки)

С клавиатуры вводится строка. Разработать программу, которая реализует указанные действия.
а) подсчитывает количество слов в тексте, которые заканчиваются на гласную букву;
б) выводит на экран все слова, длина которых меньше пяти символов;
в) удаляет все слова, которые содержат хотя бы одну латинскую букву.

Буду благодарен)

Добавлено через 4 часа 5 минут
хоть один из пунктов)
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
31.05.2016, 23:37
Ответы с готовыми решениями:

Подсчитать количество слов в тексте, которые заканчиваются на гласную букву
С клавиатуры вводится текстовый рядок. Написать программу, которая подсчитывает ко-во слов в...

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

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

Подсчитать в тексте (из файла) количество слов, заканчивающихся на гласную букву
Помогите, зарание спасибо. Дан текст, хранящийся в текстовом файле. Подсчитать в тексте количество...

6
824 / 627 / 940
Регистрация: 26.06.2015
Сообщений: 1,409
01.06.2016, 11:13 2
Лучший ответ Сообщение было отмечено vasya0501 как решение

Решение

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 <stdio.h>
#include <ctype.h>
#include <string.h>
#define is_delim(c) (isspace((c)) || ispunct((c)))
int   count_words(const char* s);
void  print_words_n(FILE* _out, const char* s, int n);
char* str_delws(char* s);
 
 
int main(void){
    char s[] = "CORBA, CPP, Java, SOAP, Go, PHP, ADA, HALO, Rust, Scala.";
 
    printf("count words: %d\n\n", count_words(s));
 
    print_words_n(stdout, s, 5);
    putchar('\n');
 
    puts(s);
    puts( str_delws(s) );
    return 0;
}
 
//подсчитывает количество слов в тексте, которые заканчиваются на гласную букву
int count_words(const char* s){
    const char vs[] = "AaEeOoIiYyUu";
    int n = 0, i = 0;
    do {
        if(!*s || is_delim(*s)){
            if((i > 0) && (strchr(vs, *(s - 1)) != NULL))
                ++n;
            i = 0;
        } else
            ++i;
    } while(*s++ != '\0');
    return n;
}
 
//выводит на экран все слова, длина которых меньше пяти символов
void print_words_n(FILE* _out, const char* s, int n){
    int m = 0;
    do {
        if(!*s || is_delim(*s)){
            if((m > 0) && (m < n))
                fprintf(_out, "%.*s ", m, s - m);
            m = 0;
        } else
            ++m;
    } while(*s++ != '\0');
    fputc('\n', _out);
}
 
//удаляет все слова, которые содержат хотя бы одну латинскую букву
char* str_delws(char* s){
    int   v;
    char* p, *i, *t = s;
    const char vs[] = "AaEeOoIiYyUu";
    
    for(p = s; *s; *s = *p){
        if(! is_delim(*p)){
            i = p;
            v = 0;
            while(*i && !is_delim(*i)){
                ++i;
                if(!v)
                    v = (strchr(vs, *i) != NULL);
            }
 
            if(v)
                p = i;
            else {
                while(p != i)
                    *s++ = *p++;
            }
            continue;
        }
        ++p;
        ++s;
    }
    return t;
}
1
960 / 701 / 228
Регистрация: 30.06.2015
Сообщений: 3,756
Записей в блоге: 37
01.06.2016, 15:02 3
Лучший ответ Сообщение было отмечено vasya0501 как решение

Решение

Цитата Сообщение от vasya0501 Посмотреть сообщение
Разработать программу, которая реализует указанные действия.
Предложу свой вариант. Раскладка русская.
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
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
#include <stdio.h>
#include <string.h>
#include <locale.h>
#define N 256
//
int v_Slove(char *ps)
{
  char d[]=" .,;:!?\n\0";
  char *pa=ps;
  int i;
  for(i=0;i<9;i++)
  {
    if(*pa==d[i])return 0;
  }
  return 1;
}
int nach_slova(char *nach)
{
  char d[]=" .,;:!?";
  int i;
  if(v_Slove(nach))
  for(i=0;i<7;i++)
  {
    if(*(nach-1)==d[i])return 1;
  }
  
  return 0;
 
}
int glasn(char *gl)
{
  int i;
  char g[]="уеэоаыяиюУЕЭОАЫЯИЮ";
  for(i=0;i<18;i++)
  {
     if(*gl==g[i])return 1;
  }
  return 0;
}
int slovo_s_glasn(char *ps)
{
   char *pps=ps;
   while(v_Slove(pps))pps++;
   pps--;
   if(glasn(pps))
     return 1;
   else
     return 0;
}
int kol_simv(char *ps)
{
   int c=0;
   while(v_Slove(ps))
   {
      c++;
      ps++;
   }
   return c;
}
int latin(char *lat)
{
   if(((*lat>='\x61')&&(*lat<='\x7a'))||((*lat>='\x41')&&(*lat<='\x5a')))
    return 1;
  else
    return 0;
}
int slovo_s_latin(char *ps)
{
   char*pps=ps;
   while(v_Slove(pps))
   {
      if(latin(pps))return 1;
      pps++;
   }
   return 0;
}
int kol_sl_s_gl(char *a)
{
  int kol_sl,i;
   for(i=0,kol_sl=0;a[i]!='\0';i++)
   {
    if(nach_slova(&a[i]))
    {
         if(slovo_s_glasn(&a[i]))kol_sl++;
    }
   }
   return kol_sl;
}
void slova_men_5_simv(char *a)
{
  int kol_sl,i;
  char *n;
  for(i=0,kol_sl=0;a[i]!='\0';i++)
  {
     if(nach_slova(&a[i]))
     {
       if(kol_simv(&a[i])<5)
       {  
          n=&a[i];
          while(v_Slove(n))
          {
              printf("%c",*n);
              n++;
          }
          printf("\n");
       }
     }
  }
}
char *udal_sl_s_lat(char *a)
{
  int i;
  char *k;
  for(i=0;a[i]!='\0';i++)
  {
      if(nach_slova(&a[i]))
      {
         if(slovo_s_latin(&a[i]))
         {
            k=&a[i]+kol_simv(&a[i]);
            a[i]='\0';
            strcat(&a[i],k);
         }
      }
  }
  return a;
}
int main(void)
{
   setlocale(LC_ALL,"RU");
   char A[N]="Привед медвeд, фаsf aaas ggg медведы, пар запара par.";
   printf("Исходная строка: %s\n",A);
   printf("Количество слов с гласной в конце: %d\n",kol_sl_s_gl(A));
   printf("Слова меньше 5 букв:\n");
   slova_men_5_simv(A);
   printf("Строка с удалёнными словами имевших хотя бы одну лат. букву: %s\n",udal_sl_s_lat(A));
   return (0);
}
1
0 / 0 / 1
Регистрация: 30.11.2015
Сообщений: 31
02.06.2016, 01:08  [ТС] 4
спасибо! Ваш вариант мне более понятен!

Добавлено через 3 минуты
а можете ещё добавить хоть немного комментариев чтоб я полностью понял что к чему)
0
960 / 701 / 228
Регистрация: 30.06.2015
Сообщений: 3,756
Записей в блоге: 37
02.06.2016, 14:11 5
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Цитата Сообщение от vasya0501 Посмотреть сообщение
Ваш вариант мне более понятен!
Более того: писать в таком стиле доставляет очень большое удовольствие...
Керниган и Ричи писали, что программа на Си обычно состоит из большого количества маленьких функций.
Каждая функция должна быть понятна с первого на неё взгляда.
Цитата Сообщение от vasya0501 Посмотреть сообщение
а можете ещё добавить хоть немного комментариев чтоб я полностью понял что к чему)
Не вопрос. Немного подправил предыдущий код.
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
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
150
151
152
153
#include <stdio.h>
#include <string.h>
#include <locale.h>
#define N 256
//Функция v_Slove проверяет - настроен ли
//указатель ps на слово или нет,
//возвращая 1 в первом случае и 0 во втором
//Короче говоря - "это слово или не слово?"
int v_Slove(char *ps)
{
  char d[]=" .,;:!?\n\0";
  char *pa=ps;
  int i;
  for(i=0;i<9;i++)
  {
    if(*pa==d[i])return 0;
  }
  return 1;
}
//Функция nach_slova проверяет
// указатель на начале слова(возвращая 1)
//или иначе возвращает 0
int nach_slova(char *nach)
{
  char d[]=" .,;:!?";
  int i;
  if(v_Slove(nach))
  for(i=0;i<7;i++)
  {
    if(*(nach-1)==d[i])return 1;
  }
  
  return 0;
 
}
//Функция  glasn проверяет гласная ли это буква(1) или нет(0)?
int glasn(char *gl)
{
  int i;
  char g[]="уеэоаыяиюУЕЭОАЫЯИЮ";
  for(i=0;i<18;i++)
  {
     if(*gl==g[i])return 1;
  }
  return 0;
}
//Функция slovo_s_glasn проверяет - это  слово
//с гласной буквой(1) или нет(0)?
//Принимает указатель на начало слова
int slovo_s_glasn(char *ps)
{
   char *pps=ps;
   while(v_Slove(pps))pps++;
   pps--;
   return glasn(pps);
   
}
//Функция kol_simv подсчитывает количество символов в слове.
//Возвращает количество симв.
//Принимает указатель на начало слова
int kol_simv(char *ps)
{
   int c=0;
   while(v_Slove(ps))
   {
      c++;
      ps++;
   }
   return c;
}
//Функция latin проверяет - латинская ли это буква(1) или нет(0)?
//Принимает указатель на букву
int latin(char *lat)
{
   return ((*lat>='\x61')&&(*lat<='\x7a'))||((*lat>='\x41')&&(*lat<='\x5a'));
}
//Функция slovo_s_latin проверяет - это слово с латинской буквой(1) или нет(0)?
//Принимает указатель на начало слова
int slovo_s_latin(char *ps)
{
   char*pps=ps;
   while(v_Slove(pps))
   {
      if(latin(pps))return 1;
      pps++;
   }
   return 0;
}
//Функция kol_sl_s_gl подсчитывает количество слов с гласной буквой
int kol_sl_s_gl(char *a)
{
  int kol_sl,i;
   for(i=0,kol_sl=0;a[i]!='\0';i++)
   {
    if(nach_slova(&a[i]))
    {
         if(slovo_s_glasn(&a[i]))kol_sl++;
    }
   }
   return kol_sl;
}
//Функция slova_men_5_simv выводит на экран все слова , которые меньше 5 символов
void slova_men_5_simv(char *a)
{
  int kol_sl,i;
  char *n;
  for(i=0,kol_sl=0;a[i]!='\0';i++)
  {
     if(nach_slova(&a[i]))
     {
       if(kol_simv(&a[i])<5)
       {  
          n=&a[i];
          while(v_Slove(n))
          {
              printf("%c",*n);
              n++;
          }
          printf("\n");
       }
     }
  }
}
//Функция udal_sl_s_lat удаляет все слова которые имеют хотя бы одну лат. букву 
char *udal_sl_s_lat(char *a)
{
  int i;
  char *k;
  for(i=0;a[i]!='\0';i++)
  {
      if(nach_slova(&a[i]))
      {
         if(slovo_s_latin(&a[i]))
         {
            k=&a[i]+kol_simv(&a[i]);
            a[i]='\0';
            strcat(&a[i],k);
         }
      }
  }
  return a;
}
int main(void)
{
   setlocale(LC_ALL,"RU");
   char A[N]="Привед медвeд, фаsf aaas ggg медведы, пар запара par.";
   printf("Исходная строка: %s\n",A);
   printf("Количество слов с гласной в конце: %d\n",kol_sl_s_gl(A));
   printf("Слова меньше 5 букв:\n");
   slova_men_5_simv(A);
   printf("Строка с удалёнными словами имевших хотя бы одну лат. букву: %s\n",udal_sl_s_lat(A));
   return (0);
}
0
0 / 0 / 0
Регистрация: 04.05.2021
Сообщений: 15
04.05.2021, 11:38 6
CoderHuligan,
Здравствуйте, могли бы вы исправить свой код или подсказать. Не отображаются буквы меньше 5ти букв, написанные кириллецой.
Спасибо за внимание !
буду ждать =)
0
960 / 701 / 228
Регистрация: 30.06.2015
Сообщений: 3,756
Записей в блоге: 37
04.05.2021, 12:50 7
Цитата Сообщение от SpaceTraveler Посмотреть сообщение
Не отображаются буквы меньше 5ти букв, написанные кириллецой.
У меня отображаются. Какой компилятор используете? Я тестировал в Pelles C 6.50.8. С кириллицей там все в порядке. В mingw gcc локаль не работает. Там надо юзать кодировку utf-8. Сохраните код в этой кодировке. Я пока не могу протестировать в gcc, так как недавно переустанавливал систему и надо еще заново ставить code blocks. Что непонятно спрашивайте, совместно победим проблему.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.05.2021, 12:50

В заданном тексте определить количество слов, которые заканчиваются на букву А
Помогите перевести программу из АВС в Турбо Паскаль заранее спасибо.:declare: var s : string;...

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

Подсчитать количество слов в предложении, которые заканчиваются на букву "я"
Cоздать символьный массив, который вмещает в себя предложение. Слова в предложении разделены...

Определить количество слов в тексте, оканчивающихся на гласную букву
Помогите пожалуйста с заданием, особенно пункт 2 ... :( С помощью текстового редактора создать...


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

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

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