Показать сообщение отдельно
  #11  
Старый 30.07.2013, 04:05
Аватар для orion_asm
orion_asm orion_asm вне форума
Прохожий
 
Регистрация: 23.06.2012
Адрес: Украина, Днепропетровск
Сообщения: 19
Версия Delphi: XE3
Репутация: 10
По умолчанию

Более оптимизированный и правильный с точки зрения задачи код (слово все-таки это не символ, поэтому это минимум 2 символа).
Код:
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#include <string.h>

#define SIZE 255

int Words_Count(char *buff)
{
    int word = 0;   // количество слов
    int i = 0;      // итератор
	int c = 0;      // счетчик символов для определения слова

    /* нужно для правильной работы цикла */
    if (!isspace(strlen(buff)))      // последний символ не пробел?
        buff[strlen(buff)] = ' ';    // нет, вносим пробел

    for (i = 0; i < strlen(buff); i++)
    {
        // Если не пробел, считаем количество символов
        if (!isspace(buff[i]))
        	c++;
        // если пробел
        else if (isspace(buff[i]))
        {
            // более двух символов значит слово,
            // подсчитываем и сбрасываем счетчик
            if (c >= 2)
            word++;
            c = 0;
        }
    }
    return word;
}

main ()
{
    // Выделяем память и заполняем нулями
	char *buff = (char*)calloc(SIZE, sizeof(char));
	if (!buff)
		printf("Not enough memory");
    // считываем строку
    gets_s(buff,SIZE);
    printf("So, we have the %d words", Words_Count(buff));
    getchar();
    return 0;
}
Ответить с цитированием