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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.11.2012, 22:45   #1
Spaun1
Пользователь
 
Регистрация: 01.11.2012
Сообщений: 14
По умолчанию Найти количество символов и слов

Помогите пожалуйста, программа читает файл и выводит количество символов и слов
Spaun1 вне форума Ответить с цитированием
Старый 01.11.2012, 23:37   #2
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

http://www.gnu.org/software/cflow/ma...c-command.html

незашто
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 02.11.2012, 18:20   #3
Spaun1
Пользователь
 
Регистрация: 01.11.2012
Сообщений: 14
По умолчанию

Кол-во символов нашёл, а вот кол-во слов не получается.
Код:
#include <stdio.h>
#include <iostream>
#include <conio.h>
using namespace std;
int main()
{
FILE*F;
char let;
int symbols,words;
symbols=0;
words=0;
F=fopen("file.txt","rt");
printf("Количество символов: \n");
while (!feof(F))
{
fscanf(F,"%c",&let);
symbols=symbols+1;
}
cout<<symbols-1;
  fclose(F);
  return 0;
}
Spaun1 вне форума Ответить с цитированием
Старый 02.11.2012, 18:57   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
char let2=0;
while (!feof(F))
{
fscanf(F,"%c",&let);
symbols=symbols+1;
if( (let>='0' && let<='9' || let>='A' && let<='z') && !(let2>='0' && let2<='9' || let2>='A' && let2<='z') )
 words++;
let2=let;
}
Подходит?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 02.11.2012, 19:02   #5
Nuklon
Форумчанин
 
Аватар для Nuklon
 
Регистрация: 05.04.2012
Сообщений: 134
По умолчанию

Код:
#include <stdio.h>
#include <ctype.h>


bool FileWordsLength(const char* filename, long& cword, long& clen) {
	FILE* fp = fopen(filename, "r");
	if(! fp)
		return false;

	fseek(fp, 0L, SEEK_END);
	clen = ftell(fp); // получаем размер файла в байтах
	fseek(fp, 0L, SEEK_SET);

	cword  = 0L;
	int ch = 0;
	while((ch = fgetc(fp)) != EOF) { // подсчитываем кол-во слов(english) в файле
		if(isalpha(ch)) {
			cword += 1L;
			if(fscanf(fp, "%*[a-zA-Z]%c", &ch) != 1)
				break;
		}
	}
	fclose(fp);
	return true;
}



int main(){
     long count_length = 0L;
     long count_words  = 0L;

     if(FileWordsLength("text.txt", count_words, count_length)) {
           printf("file count length: %ld\n", count_length);
           printf("file count words: %ld\n",  count_words);
    }

    getchar();
    return 0;
}
Nuklon вне форума Ответить с цитированием
Старый 02.11.2012, 19:18   #6
Spaun1
Пользователь
 
Регистрация: 01.11.2012
Сообщений: 14
По умолчанию

Nuklon, на консоли завис

Stilet, спасибо

скажите пожалуйста, что означает char2=0, let2=let
и эта строчка?
Код:
 if( (let>='0' && let<='9' || let>='A' && let<='z') && !(let2>='0' && let2<='9' || let2>='A' && let2<='z') )

Последний раз редактировалось Stilet; 11.11.2012 в 16:06.
Spaun1 вне форума Ответить с цитированием
Старый 02.11.2012, 21:56   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
let2=let
Это запоминание предидущего символа для сравнения: Если предидущий не буква, и этот буква - считается что это начало нового слова.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 02.11.2012, 22:51   #8
Spaun1
Пользователь
 
Регистрация: 01.11.2012
Сообщений: 14
По умолчанию

Программа работала у меня с русскими буквами, а после когда снова сделал уже нет, что не так:
Код:
 if( (let>='0' && let<='9' || let>='A' && let<='z'|| let>='А' && let<='я') && !(let2>='0' && let2<='9' || let2>='A' && let2<='z'|| let2>='А' && let2<='я') )
Spaun1 вне форума Ответить с цитированием
Старый 02.11.2012, 23:10   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Пройдись отладкой по программе, и выясни какие значения принимают переменные.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 03.11.2012, 09:38   #10
Spaun1
Пользователь
 
Регистрация: 01.11.2012
Сообщений: 14
По умолчанию

прописал:
Код:
#include <locale.h>
 setlocale(LC_CTYPE,"Russian");
а программа не находит русские слова..

Последний раз редактировалось Spaun1; 03.11.2012 в 09:45.
Spaun1 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Строка из слов, разделённых пробелами. Найти среднее количество символов в словах четной длины (Паскаль) marystupidyeah Помощь студентам 5 24.05.2011 16:55
Количество слов в рядке. Разбитие по по пять символов. Fatummors Общие вопросы C/C++ 8 07.03.2010 16:39
Текстовый файл. Подсчитать в нем количество слов, символов, абзацев. Xeon332 Помощь студентам 3 24.12.2009 01:23
Дана строка, состоящая из нескольких слов. Найти количество слов, которые содержат хотя бы одну букву "А" Mashaa Помощь студентам 13 09.12.2009 13:28
подсчитать количество символов слов и предложений nev Помощь студентам 4 09.06.2007 21:22