Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.12.2009, 21:16   #1
Bl@st
Пользователь
 
Регистрация: 25.10.2009
Сообщений: 47
Сообщение Подсчет слов(Си)

В символьной строке сосчитать число слов, содержащих букву 'а'.
Код:
#include<stdio.h>
#include<windows.h>

void main()
{
	char s[80];
	int i=0,count=0,flag=0;

	printf("введите строку:");
	gets(s);

	while(s[i]!='\0')
	{
		if(s[i]=='а')
			flag=1;
		if(s[i]==' '&&flag==1)
		{
			count++;
			flag=0;
		}
		
		i++;
	}

	if(flag==1&&s[i]=='\0')
			count++;

	printf("число слов с буквой 'а':%d\n",count);
}
норм. написана или как то можно оптимизировать код? какие-нибудь советы :-)
Bl@st вне форума Ответить с цитированием
Старый 20.12.2009, 21:38   #2
Veselyn
Форумчанин
 
Аватар для Veselyn
 
Регистрация: 29.01.2009
Сообщений: 175
По умолчанию

Она вообще работает?
библиотека для printf и scanf
Код:
#include <stdio.h>
Все люди делятся на 10 типов: те, кто понимают двоичную систему счисления и те, кто нет.
Veselyn вне форума Ответить с цитированием
Старый 20.12.2009, 21:46   #3
Bl@st
Пользователь
 
Регистрация: 25.10.2009
Сообщений: 47
По умолчанию

ну тык она и есть..работает конечно, просто как мне кажется как то она у меня по варварски написана или самокритичность?)
Bl@st вне форума Ответить с цитированием
Старый 20.12.2009, 22:14   #4
Alex_FF
Удален
Форумчанин
 
Регистрация: 02.12.2009
Сообщений: 309
По умолчанию

нет смысла проверять последнее слово после цикла:
Код:
if(flag==1&&s[i]=='\0')
	count++;

Последний раз редактировалось Alex_FF; 20.12.2009 в 22:23.
Alex_FF вне форума Ответить с цитированием
Старый 20.12.2009, 22:19   #5
Alex_FF
Удален
Форумчанин
 
Регистрация: 02.12.2009
Сообщений: 309
По умолчанию

в вашем решении я бы использовал цикл с постусловием do, и условный оператор if записал бы так:
Код:
if((s[i] == ' ' && flag==1) || (s[i] == '\0' && flag == 1))
Переменная flag у вас принимает только два значения, поэтому её лучше описать как bool flag.
Будет что-то типо этого:
Код:
void main()
{
	char s[80];
	int i = 0, count = 0;
	bool flag = false;

	printf("введите строку:");
	gets(s);

	do
	{
		if(s[i]=='а') flag = true;
		if((s[i]==' ' && flag) || (s[i] == '\0' && flag))
		{
			count++;
			flag = false;
		}
		
		i++;
	} while (s[i] != '\0');

	printf("число слов с буквой 'а':%d\n",count);
}

Последний раз редактировалось Alex_FF; 20.12.2009 в 22:26.
Alex_FF вне форума Ответить с цитированием
Старый 20.12.2009, 23:17   #6
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

А по-моему флаг здесь вообще лишний. Я бы так сделал:
Код:
#include <stdio.h>

int main()
{
	char s[80];
	int  count = 0, i;

	printf("Enter the string: ");
	gets(s);

	for(i = 0; s[i] != '\0'; i++) {
		if( s[i] == 'a' ) {
			count++;
			while( s[i] != ' ' && s[i] != '\0' )
				i++;
		}
	}

	printf("There is %d words with symbol 'a'", count);

	return 0;
}
netrino вне форума Ответить с цитированием
Старый 21.12.2009, 00:18   #7
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

Цитата:
Код:
if( s[i] == 'a' ) {
			count++;
			while( s[i] != ' ' && s[i] != '\0' )
				i++;
		}
А если в слове несколько букв "а"?
psycho-coder вне форума Ответить с цитированием
Старый 21.12.2009, 00:20   #8
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Так ведь нужно не кол-ство букв в словах, а кол-ство слов с буквой а в предложении Так что всё верно, как только встретили в слове букву а, то это слово нас больше не интересует - пропускаем его
netrino вне форума Ответить с цитированием
Старый 21.12.2009, 00:22   #9
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

АА, туплю, туплю. Не сразу сообразил зачем там while(((
psycho-coder вне форума Ответить с цитированием
Старый 21.12.2009, 00:51   #10
Bl@st
Пользователь
 
Регистрация: 25.10.2009
Сообщений: 47
По умолчанию

netrino
спасибо большое!
Alex_FF
спасибо, только выдает на -1 меньше, если не поставить пробел в конце, как и у меня было пока
Код:
if(flag==1&&s[i]=='\0')
			count++;
не было
Bl@st вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
подсчет символов и слов в тексте(паскаль) Noven'kii Помощь студентам 4 16.05.2009 10:10
Подсчет количества слов предложении Милашка000 Общие вопросы C/C++ 2 24.04.2009 20:02
Составить в алфавитном порядке список всех слов, встречающихся в тексте, и количество этих слов. KAPAHDAW Паскаль, Turbo Pascal, PascalABC.NET 2 17.02.2009 01:19
Pascal. На подсчет слов и на массив Lot Помощь студентам 2 24.12.2008 18:35
Подсчет слов Stanislav Общие вопросы Delphi 11 28.08.2008 10:37