Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
w0nder
0 / 0 / 0
Регистрация: 23.11.2012
Сообщений: 131
#1

Посимвольная обработка текстового файла: распределение всех слов по длине - C++

03.03.2013, 02:56. Просмотров 1200. Ответов 21
Метки нет (Все метки)

Вывести в файле распределение всех слов по длине (т.е. сколько в файле слов из одной буквы, из двух и т.д.). За слово считать цепочку символов, которая отделена пробелами, точкой, запятой, круглыми скобками, воскл.знаком, вопр.знаком.

(Данные из файла считывать посимвольно, нельзя сразу считывать весь файл или целую строчку, нельзя копировать все содержимое файла в оперативную память.)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.03.2013, 02:56     Посимвольная обработка текстового файла: распределение всех слов по длине
Посмотрите здесь:
C++ Напечатать последовательно первые буквы всех слов текста (из одного текстового файла в другой)
Осуществить сортировку текстового файла по длине строк циклическим слиянием/разделением C++
C++ Посимвольная обработка строк
Посимвольная обработка строки C++
C++ Посимвольная обработка строк
C++ Посимвольная обработка строк
Чтение текста из текстового фала, обработка слов и вывод в консоль C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Черный ворон
129 / 123 / 6
Регистрация: 31.01.2012
Сообщений: 435
03.03.2013, 03:32     Посимвольная обработка текстового файла: распределение всех слов по длине #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <fstream.h>
#include <iostream.h>
bool check(char c){
if (c==' ') return true;
if (c=='.') return true;
if (c==',') return true;
if (c=='!') return true;
if (c=='(') return true;
if (c==')') return true;
return false;
}
 
int main(){
int count[25]; //максимальная длина слова 25 символов. можно и увеличить...
int n=25;
char c;
int t=0;
for (int i=0; i<n; i++) count[i]=0;
ifstream input ("D:\\1.txt");
while (!input.eof()){
        input.get(c);
        if (!check(c)){
                t++;
        }
        else
        {
                count[t-1]++;
                t=0;
        }
}
count[t-2]++;
for (int i=0; i<n-1; i++)
cout<<"words with "<<i+1<<" letters: "<<count[i]<<endl;
system ("pause");
return 0;
}
простенький тестовый пример код прошел, но советую все-таки внимательно протестировать
w0nder
0 / 0 / 0
Регистрация: 23.11.2012
Сообщений: 131
03.03.2013, 03:49  [ТС]     Посимвольная обработка текстового файла: распределение всех слов по длине #3
Спасибо!
Только компилятор вот на что ругается:

[IMG]http://s018.***********/i515/1303/ce/ef27a7cac6e8.png[/IMG]
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
03.03.2013, 05:13     Посимвольная обработка текстового файла: распределение всех слов по длине #4
C++
1
2
3
#include <fstream.h>
#include <iostream.h>
using namespace std;
w0nder
0 / 0 / 0
Регистрация: 23.11.2012
Сообщений: 131
09.03.2013, 23:29  [ТС]     Посимвольная обработка текстового файла: распределение всех слов по длине #5
А что делает переменная t?
Черный ворон
129 / 123 / 6
Регистрация: 31.01.2012
Сообщений: 435
09.03.2013, 23:45     Посимвольная обработка текстового файла: распределение всех слов по длине #6
w0nder, переменная t считает сколько символов в текущем просматриваемом слове
w0nder
0 / 0 / 0
Регистрация: 23.11.2012
Сообщений: 131
09.03.2013, 23:58  [ТС]     Посимвольная обработка текстового файла: распределение всех слов по длине #7
Спасибо, и еще один вопрос. Я так поняла, что с 22 по 30 строчку задействована переменная t, которая считает кол-во символов в каждом слове, и, если в файле встретится разделяющий символ, то он не будет подсчитан.

А для чего дальше строчка
C++
1
count[t-2]++;
?
Черный ворон
129 / 123 / 6
Регистрация: 31.01.2012
Сообщений: 435
10.03.2013, 00:05     Посимвольная обработка текстового файла: распределение всех слов по длине #8
w0nder, не совсем так. если в файле встречается разделяющий символ он будет не посчитан, кроме того количество слов с t буквами будет увеличено на единицу.
эта строчка нужна для верной обработки последнего слова в файле (специфика возникает из-за возможного отсутствия разделителя перед концом файла).
w0nder
0 / 0 / 0
Регистрация: 23.11.2012
Сообщений: 131
10.03.2013, 17:24  [ТС]     Посимвольная обработка текстового файла: распределение всех слов по длине #9
Черный ворон, ивиняюсь, еще - все не могу понять, какую функцию выполняет 18 строчка?
Черный ворон
129 / 123 / 6
Регистрация: 31.01.2012
Сообщений: 435
10.03.2013, 17:46     Посимвольная обработка текстового файла: распределение всех слов по длине #10
w0nder, строка 18
C++
1
for (int i=0; i<n; i++) count[i]=0;
инициализирует нулями количество подсчитываемых слов различной длинны.
w0nder
0 / 0 / 0
Регистрация: 23.11.2012
Сообщений: 131
10.03.2013, 18:45  [ТС]     Посимвольная обработка текстового файла: распределение всех слов по длине #11
И получается, что каждый раз новое значение переменной t отправляется в массив, а затем эти числа в массиве сортируются?
Черный ворон
129 / 123 / 6
Регистрация: 31.01.2012
Сообщений: 435
10.03.2013, 19:03     Посимвольная обработка текстового файла: распределение всех слов по длине #12
w0nder, нет. изначально я выделяю массив на 25 элементов предполагая, что в тексте не встретится слово больше чем из 25букв. можно увеличить хоть до ста. это не так принципиально. потом перед чтением файла инициализирую нулями количество слов с различным количеством букв. потом читаю по символам файл, когда встречаю разделить инкрементирую значение ячейки масиива отвечающие за слова только что подсчитанной длины последнего прочтенного слова. не слишком запутано? могу попробовать иначе пояснить...
w0nder
0 / 0 / 0
Регистрация: 23.11.2012
Сообщений: 131
10.03.2013, 19:09  [ТС]     Посимвольная обработка текстового файла: распределение всех слов по длине #13
Черный ворон, ну вот было бы неплохо. Просто не могу никак понять алгоритм до конца
Черный ворон
129 / 123 / 6
Регистрация: 31.01.2012
Сообщений: 435
10.03.2013, 19:22     Посимвольная обработка текстового файла: распределение всех слов по длине #14
w0nder, ну попробую на примере. представим, что у нас файл выглядит так:
C++
1
1 12 12 12 123 1234
теперь запуская программу:
предполагаем, что в файле нет слов длиннее 25 букв
C++
1
int count[25];
считаем, что пока мы не начали читать количество слов с любым количеством букв в нем равно нулю
C++
1
for (int i=0; i<n; i++) count[i]=0;
открываем файл:
C++
1
ifstream input ("D:\\1.txt");
C++
1
2
3
4
5
6
7
8
9
10
11
while (!input.eof()){ //пока не добрались до конца файла
        input.get(c); //считываем из него один символ
        if (!check(c)){ //если это не разделитель
                t++; //то в текущем слове количество букв увеличиваем на единицу и переходим к следующему символу
        }
        else //если символ - разделитель
        {
                count[t-1]++; //то в ячейке массива с индексом t-1(потому что индексация у массива с нуля) увеличиваем значение на 1 
                t=0; //обнуляем количество букв в текущем слове и переходим к следующему символу
        }
}
таким образом в нулевой ячейке массива хранится количество однобуквенных слов
в первой - двухбуквенных
во второй - трех
итд.

для случая тестового файла результат будет
1
3
1
1

так понятнее?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.03.2013, 19:29     Посимвольная обработка текстового файла: распределение всех слов по длине
Еще ссылки по теме:
C++ Посимвольная обработка UTF8 строки
Обработка текстового файла C++
C++ Обработка текстового файла
C++ Обработка информации из текстового файла
C++ С текстового файла прочитать строку слов

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
w0nder
0 / 0 / 0
Регистрация: 23.11.2012
Сообщений: 131
10.03.2013, 19:29  [ТС]     Посимвольная обработка текстового файла: распределение всех слов по длине #15
Черный ворон, вот теперь все понятно, спасибо большое
Yandex
Объявления
10.03.2013, 19:29     Посимвольная обработка текстового файла: распределение всех слов по длине
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru