Найти все слова текста, в которых буквы ‘a’ и ‘b’ встречаются максимальное число раз - C (СИ)
Формулировка задачи:
помогите написать программу на Си
Ввести массив строк символов (текст). Найти все слова текста, в которых буквы
‘a’ и ‘b’ встречаются максимальное число раз. Словами считать группы символов,
разделенные одним или несколькими пробелами.
заранее спасибо)
Решение задачи: «Найти все слова текста, в которых буквы ‘a’ и ‘b’ встречаются максимальное число раз»
textual
Листинг программы
#include "stdafx.h" // ЕСли не в VC++, то вроде надо это убрать
#include<stdio.h>
#include<string.h>
#include<conio.h>
#include <windows.h>
using namespace std;
int main()
{
int count_a=0, count_b=0, max_a=0, max_b=0, position_of_max_a_last=0, position_of_max_b_last=0, position_of_max_a=0, position_of_max_b=0;
char input_string[500];
gets(input_string); /* Читает строку с клавиатуры */
//***************************************************************************************************************************
// Перебираем строку от нулевого до последнего
for (int i=0;i<strlen(input_string);i++)
{
// Если это не нулевой символ И не пробел И предыдущий символ = пробел
if ((i!=0) && (input_string[i]!=' ') && (input_string[i-1]==' '))
{
position_of_max_a=i; // position_of_max_а - это временный указатель. Окончательно на нужно слово будет указывать position_of_max_а_last
position_of_max_b=i;
}
// Проверяем на : пробел , "а", "в"
switch(input_string[i])
{
case ' ':
// ЕСли счетчик элементов "а" больше максимального значения, значит максимальное значение этот счетчик
if (max_a<count_a) {
max_a=count_a;
position_of_max_a_last=position_of_max_a; // position_of_max_a_last - это указатель на начало слова, где максимально "а"
count_a=0;
}
// ЕСли счетчик элементов "в" больше максимального значения, значит максимальное значение этот счетчик
if (max_b<count_b) {
max_b=count_b;
position_of_max_b_last=position_of_max_b;// position_of_max_b_last - это указатель на начало слова, где максимально "b"
count_b=0;
}
break;
case 'a':
++count_a; // если мы набрели на "а" , то прибавим 1 к счетчику
//ЕСли это последний элемент И счетчик "а" больше чем максимальное значение ...
if ( (i==(strlen(input_string)-1)) && (max_a<count_a) )
{
max_a=count_a;
position_of_max_a_last=position_of_max_a;
count_a=0;
}
break;
case 'b':
++count_b;
if ((i==(strlen(input_string)-1)) && (max_b<count_b)) {
max_b=count_b;
position_of_max_b_last=position_of_max_b;
count_b=0;
}
break;
}
}
// Если там был такой элемент , значит его max изменялось и оно больше нуля
if (max_a>0)
{
printf("\nThe word, where max count 'a' is ");
for (int i=position_of_max_a_last;i<strlen(input_string); i++){
if (input_string[i]==' ')
break;
printf("%c", input_string[i] );
}
}
if (max_b>0)
{
printf("\nThe word, where max count 'b' is ");
for (int i=position_of_max_b_last;i<strlen(input_string); i++){
if (input_string[i]==' ')
break;
printf("%c", input_string[i] );
}
}
getch();
return 0;
}