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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.06.2010, 02:21   #1
Link12
Пользователь
 
Регистрация: 23.03.2010
Сообщений: 12
По умолчанию Подсчёт кол-ва слов

Собственно смысл таков:
Создаю файл file.txt с помощью текстового редактора, длина которого не превышает 200 символов. Пишу программу, которая:
1) выводит тест на экран дисплея
2) подсчитывает число слов в тексте

Код:
#define yes 1
#define no 0
//-----------------------------------------------
main()
{
  const n=200;
  int nw,in;
  char *s1,a[n];
  s1="C:\\file.txt";
  FILE *fi;
  if((fi=fopen(s1,"rt"))==0)
  {
    cout<<"\nError1\n";
    return 1;
  }
while (fgets(a,n,fi))
rus(a);
       int i;
       nw=0;
       in=no;

         for (i=0; i<n; i++)
          {
            if (a[i]==' ' || a[i]=='\n' || a[i]=='\t')
              in=no;
            else
              if(in==no)
                {
                 in=yes;
                 nw++;
                }
          }
     cout<<"slov="<<nw;
     fclose(fi);
getch();
}
Трабла заключается в том, что не правильно подсчитывает слова в файле. (их 8, а показывает 11). Что я сделал не так?
Link12 вне форума Ответить с цитированием
Старый 04.06.2010, 03:07   #2
Greblin
Меркантильный кю
Участник клуба
 
Аватар для Greblin
 
Регистрация: 02.02.2008
Сообщений: 1,001
По умолчанию

Добавьте сюда
Код:
if (a[i]==' ' || a[i]=='\n' || a[i]=='\t')
условие a[i] == '\r'
Росли вроде умными, выросли дурнями... (c)А.Васильев
Greblin вне форума Ответить с цитированием
Старый 04.06.2010, 04:08   #3
Link12
Пользователь
 
Регистрация: 23.03.2010
Сообщений: 12
По умолчанию

Цитата:
Сообщение от Greblin Посмотреть сообщение
Добавьте сюда
Код:
if (a[i]==' ' || a[i]=='\n' || a[i]=='\t')
условие a[i] == '\r'
Не помогло.
PS: Вот что написано в файле: Текст считанный из файла и показанный на мониторе

Я тут немного потестил и обнаружил, что он всегда увеличивает количество слов на 3...

Последний раз редактировалось Link12; 04.06.2010 в 04:14.
Link12 вне форума Ответить с цитированием
Старый 04.06.2010, 10:52   #4
Ozerich
Студент 1 курса
Форумчанин Подтвердите свой е-майл
 
Аватар для Ozerich
 
Регистрация: 27.06.2008
Сообщений: 959
По умолчанию

Код:
	char s[100];
	int count = 0;
	FILE *f = fopen("input.txt","r");
	while(fscanf(f,"%s",&s) > 0)
		count++;
	fclose(f);
C++(STL, QT, WinInet) / DHTML(CSS) / JavaScript / PHP Developer
Ozerich вне форума Ответить с цитированием
Старый 04.06.2010, 11:02   #5
coper
Пользователь
 
Регистрация: 16.11.2009
Сообщений: 28
По умолчанию

Во первых. Зачем fgets Запихнули в while, да еще и тело while оставили пустым.
Во вторых. fgets считывает строку из файла до конца первой строки или до EOF смотря что первым найдет, так что условия a[i]=='\t', a[i]=='\n' излишни
В третьих: У меня ваша программа работает правильно. Да и у вас после перезагрузки может начать правильно работать. Зачем вы идете до a[200] в цикле? массив то ваш гораздо меньше, а в a[i]>a[strlen] может храниться что угодно. Видимо там он и находит лишние знаки. Цикл следует заменить на такой;
Код:
for (int i=0; a[i]!='\0'; a++)
{ ваш код..
}

Последний раз редактировалось coper; 04.06.2010 в 11:08.
coper вне форума Ответить с цитированием
Старый 04.06.2010, 12:05   #6
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

подсчет кол-ва слов:
Код:
int count = 0;
char *s = "abcd defgh";
int len = strlen(s);
for(int i=0; i<len; i++){
     if(s[i] != ' ') {
          count++;
          for(; i<len && s[i] != ' '; i++);
     }
}
другой вариант:
Код:
int count = 0;
char *s = "abcd defgh";
for(int i=0; s[i] != '\0'; i++){
     if(s[i] != ' ') {
          count++;
          for(; s[i] != '\0' && strs[i] != ' '; i++);
     }
}

Последний раз редактировалось NiCola999; 04.06.2010 в 12:07.
NiCola999 вне форума Ответить с цитированием
Старый 04.06.2010, 12:19   #7
Link12
Пользователь
 
Регистрация: 23.03.2010
Сообщений: 12
По умолчанию

не выходит =(
Link12 вне форума Ответить с цитированием
Старый 04.06.2010, 12:37   #8
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

Код:
#include <iostream>
using namespace std;

int main()
{
  const int n=200;
  int count = 0, len;;
  char a[n];
  FILE *fi;
  if((fi=fopen("C:\\file.txt","r"))==0)
  {
    cout<<"\nError1\n";
    return 1;
  }
   while (fgets(a, n, fi)){ 
     len = strlen(a);
      for(int i = 0; i < len; i++){
        if(a[i] != ' '){
               count++;
               for(; i < len && a[i] != ' '; i++);
        }
      }
   }    
   fclose(fi);         
   cout<<"slov = " << count << endl;
   cin.get();
   return 0;
}
NiCola999 вне форума Ответить с цитированием
Старый 04.06.2010, 12:48   #9
Ozerich
Студент 1 курса
Форумчанин Подтвердите свой е-майл
 
Аватар для Ozerich
 
Регистрация: 27.06.2008
Сообщений: 959
По умолчанию

Поменьше кода
Код:
#include <iostream>
using namespace std;
int main()
{
	char word[200];
	int count = 0;
	FILE *f = fopen("C:\\file.txt","r");
	while(fscanf(f,"%s",&word) > 0)
		count++;
	fclose(f);
        cout<<"slov = " << count << endl;
	cin.get();
	return 0;
}
C++(STL, QT, WinInet) / DHTML(CSS) / JavaScript / PHP Developer
Ozerich вне форума Ответить с цитированием
Старый 04.06.2010, 12:50   #10
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

ага можно и так, только проверочку на отсутствие файла лучше оставить)
NiCola999 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
подсчёт слов neBu4kaMaXiM Помощь студентам 2 30.03.2010 10:00
подсчёт слов neBu4kaMaXiM Фриланс 13 18.03.2010 18:11
по вводу слов в массив и подсчёт введённых слов -ushёl- Общие вопросы C/C++ 4 16.11.2009 00:45
Подсчёт кол-ва дней ivp88 БД в Delphi 7 14.01.2008 09:16
Подсчёт кол-ва единиц в столбце Freddie_X Microsoft Office Excel 3 10.03.2007 09:38