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

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

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

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

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

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

(Данные из файла считывать посимвольно, нельзя сразу считывать весь файл или целую строчку, нельзя копировать все содержимое файла в оперативную память.)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.03.2013, 02:56
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Посимвольная обработка текстового файла: распределение всех слов по длине (C++):

Напечатать последовательно первые буквы всех слов текста (из одного текстового файла в другой) - C++
Йоу,ребят. Программа должна считывать текст из файла и выводить в другой текстовой файл. А задание,собственно,вот. "Напечатать...

Осуществить сортировку текстового файла по длине строк циклическим слиянием/разделением - C++
Осуществить сортировку текстового файла циклическим слиянием/разделением (по длине строк). Файл читается группами по n строк в динамический...

Посимвольная обработка строк - C++
Доброго времени суток всем))) Дано задание.:Дана строка. Сформировать строку, содержащую все символы данной за исклю-чение символов...

Посимвольная обработка строк - C++
Помогите пожалуйста с решением этой задачи. Дана строка. Сформировать строку, содержащую все символы данной за исключение символов...

Посимвольная обработка строк - C++
Дано слово. Определить, упорядочены ли его буквы по алфавиту. Выделить первую упорядоченную последовательность в новую строку. #include...

Посимвольная обработка строки - C++
простой пример использования функции WordIndex(s,n).

21
w0nder
0 / 0 / 0
Регистрация: 23.11.2012
Сообщений: 131
12.03.2013, 01:14  [ТС] #16
Кстати, протестировала получше, заметила вот что. Ведь числа же по идее не должны считаться за символ? Если речь идет именно о количестве букв в словах.
Как можно в коде сделать так, чтобы цифры не считались?
0
Черный ворон
130 / 124 / 6
Регистрация: 31.01.2012
Сообщений: 435
12.03.2013, 01:23 #17
w0nder, в смысле вообще не учитывать цифры? или считать их разделителем?
если первый вариант, то цикл while изменить так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
while (!input.eof()){
        input.get(c);
        if (!isdigit(c)) //если текущий символ цифра - просто переходим к следующему символу сразу
        if (!check(c)){
                t++;
        }
        else
        {
                count[t-1]++;
                t=0;
        }
}
если считать разделителем, то цикл не менять, а функцию check изменить так:
C++
1
2
3
4
5
6
7
8
9
10
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;
if (isdigit(c)) return true;
return false;
}
кстати сейчас протестировал. похоже разницы нет. в данном случае оба варианта изменения кода дают одинаковый результат
1
w0nder
0 / 0 / 0
Регистрация: 23.11.2012
Сообщений: 131
12.03.2013, 01:33  [ТС] #18
Черный ворон, да, первый вариант, спасибо

Добавлено через 3 минуты
Вот только если вводится комбинация из букв и цифр (ww1) , то в результате выходит, что в этом слове на один символ меньше, чем есть на самом деле

Добавлено через 4 минуты
Хотя если в такой цепочке символов будут сначала цифры, а потом буквы - то считает правильно
0
Черный ворон
130 / 124 / 6
Регистрация: 31.01.2012
Сообщений: 435
12.03.2013, 01:34 #19
w0nder, странно. у меня все адекватно работает.еще раз прикладываю полный код и результат:
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
37
38
39
40
#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;
//if (isdigit(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);
        cout<<c;
        if (!isdigit(c))
        if (!check(c)){
                t++;
        }
        else
        {
                count[t-1]++;
                t=0;
        }
}
cout<<endl;
count[t-2]++;
for (int i=0; i<n-1; i++)
cout<<"words with "<<i+1<<" letters: "<<count[i]<<endl;
system ("pause");
return 0;
}
0
Миниатюры
Посимвольная обработка текстового файла: распределение всех слов по длине  
w0nder
0 / 0 / 0
Регистрация: 23.11.2012
Сообщений: 131
12.03.2013, 01:37  [ТС] #20
Я просто еще немного переделала (вчитаталась в задание - нужно было, чтобы результат выводился не в консоли, а во втором файле) и добавила строчку if (count[i]>0) , может в этом дело

Код:

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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#include <fstream>
#include <iostream>
using namespace std;
 
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;
    if (c=='\n') return true;
return false; }
 
int main(){
int ok;
do {
int count[40]; 
int n=40;
char c; 
int t=0; 
 
for (int i=0; i<n; i++) count[i]=0; 
fstream fin ("1.txt", ios::in);
fstream fout ("2.txt", ios::out);
 
    while (!fin.eof()) {
        fin.get(c);
        if (!isdigit(c)) 
        if (!check(c)){ 
            t++;  
        }
 
        else {  
            count[t-1]++; 
                                                 
            t=0; 
        }
    }
        count[t-2]++; 
 
for (int i=0; i < n-1; i++) 
    if (count[i]>0) 
    fout << "words with "<< i+1 << " letter(s): " << count[i]<<endl;
 
fin.close ();
fout.close ();
 
cout << " Vai turpinДЃt (1) vai beigt (0)?" << endl;
cin >> ok;
}
while (ok == 1);
return 0; }
0
Черный ворон
130 / 124 / 6
Регистрация: 31.01.2012
Сообщений: 435
12.03.2013, 01:46 #21
w0nder, нет, дело не в if(count[i]>0)
Ваш код отработал и отработал правильно (прикладываю скриншоты полученных тестовых файлов)
единственное, я не понял к чему это:
C++
1
2
3
4
cout << " Vai turpinДЃt (1) vai beigt (0)?" << endl;
cin >> ok;
}
while (ok == 1);
1
Миниатюры
Посимвольная обработка текстового файла: распределение всех слов по длине  
w0nder
0 / 0 / 0
Регистрация: 23.11.2012
Сообщений: 131
12.03.2013, 01:55  [ТС] #22
Кстати да, попробовала еще раз - все работает как надо.
А это для повторного выполнения программы, по заданию нужно было.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.03.2013, 01:55
Привет! Вот еще темы с ответами:

Чтение текста из текстового фала, обработка слов и вывод в консоль - C++
Задача программы: считать текст из текстового файла; выделить слова с повторяющимися буквами другим цветом; вывести весь текст в консоль. ...

Посимвольная обработка UTF8 строки - C++
Добрый день. пишу программу в С++ в Linux Ubuntu, необходимо обрабатывать строку введенную в UTF-8 (русские символы) Есть...

Сортировка слов текстового файла путём слияния данных из файла и заданного внутреннего массива - C++
Здравствуйте. Имеется задание, которое я ни в коем случае не прошу за меня сделать. Мне непонятно пару моментов, которые бы мне...

Обработка текстового файла - C++
Есть функция в dll, которая обрабатывает текстовый файл и записывает результат в другой. Формат файла: 1.3446 11 1.325 876 1.3567...


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

Или воспользуйтесь поиском по форуму:
22
Yandex
Объявления
12.03.2013, 01:55
Ответ Создать тему
Опции темы

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