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

Написать программу вычисления количества печатаемых символов в файле - C++

Восстановить пароль Регистрация
 
Анастасия21
0 / 0 / 0
Регистрация: 11.09.2013
Сообщений: 8
11.09.2013, 18:58     Написать программу вычисления количества печатаемых символов в файле #1
Помогите Написать программу вычисления количества печатаемых символов в файле. Обработать ошибки.
DEV C++
Заранее спасибо!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.09.2013, 18:58     Написать программу вычисления количества печатаемых символов в файле
Посмотрите здесь:

подсчет количества символов в файле C++
C++ Составить программу для вычисления количества арабских цифр в введенном с клавиатуры строке символов
Составить программу вычисления произвольного количества значений выражения C++
Написать программу, подсчитывающую количества слов в текстовом файле C++
C++ Написать программу, подсчитывающую количества слов в текстовом файле
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
UranFlex
131 / 129 / 21
Регистрация: 25.05.2013
Сообщений: 233
12.09.2013, 02:00     Написать программу вычисления количества печатаемых символов в файле #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
#include<iostream>
#include<fstream>
#include<cctype>
 
using namespace std;
 
int main() {
 
 
    // открыть файл дата для чтения
    ifstream fileIn( "data" ); // файл data должен быть рядом с исполняемым файлом
 
    // проверить успешность открытия файла
    if ( !fileIn ) {
        cerr << "Ошибка открытия файла: " << endl;
        return -1;
    }
 
    unsigned count( 0 ); // счетчик печатаемых символов
    int ch; // очередной считываемый символ
 
    // посимвольно читаем файл
    while ( fileIn.good() ){
        ch = fileIn.get();
        if ( isprint( ch ) ) // если очередной символ печатаемый
            ++count; // то увеличиваем счетчик печатаемых символов
    }
 
    fileIn.close(); // закроем файл
    cout << "Количество печатаемых символов равно " << count << endl;
 
    return 0;
}
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
12.09.2013, 14:43     Написать программу вычисления количества печатаемых символов в файле #3
Цитата Сообщение от UranFlex Посмотреть сообщение
работает только для символов латинского алфавита
Если это добавить, то будет работать не только для латинского:
C++
1
2
3
4
setlocale(0, "");
...
if ( isprint((unsigned char)ch ) ) // если очередной символ печатаемый
...
Цитата Сообщение от UranFlex Посмотреть сообщение
// файл data должен быть рядом с исполняемым файлом
Если из среды запускать, то в папке проекта.
UranFlex
131 / 129 / 21
Регистрация: 25.05.2013
Сообщений: 233
12.09.2013, 15:52     Написать программу вычисления количества печатаемых символов в файле #4
alsav22,
- на Linux Mint с компилятором g++ для символов кириллицы не прокатило - для текста "ене" ответ программы 0. Для латинского алфавита работает правильно.

- на Windows 7 с компилятором MinGW работает как с символами кириллицы, так и с символами латинского алфавита. Но откуда-то берется лишняя единичка. Т.е. для трех символов "ене" или "qwq" ответ будет 4. А для пустого файла размером 0 байт ответ будет 1.
Откуда в данном случае 1 пришла?

Кликните здесь для просмотра всего текста
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
#include<iostream>
#include<fstream>
#include<cctype>
#include<clocale>
 
using namespace std;
 
int main() {
    setlocale(0, "");
 
 
    // открыть файл дата для чтения
    ifstream fileIn( "data" ); // файл data должен быть рядом с исполняемым файлом
 
    // проверить успешность открытия файла
    if ( !fileIn ) {
        cerr << "Ошибка открытия файла: " << endl;
        return -1;
    }
 
    unsigned count( 0 ); // счетчик печатаемых символов
    int ch; // очередной считываемый символ
 
    // посимвольно читаем файл
    while ( fileIn.good() ){
        ch = fileIn.get();
        if  ( isprint((unsigned char)ch ) ) // если очередной символ печатаемый
            ++count; // то увеличиваем счетчик печатаемых символов
    }
 
    fileIn.close(); // закроем файл
    cout << "Количество печатаемых символов равно " << count << endl;
 
    return 0;
}
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
12.09.2013, 16:02     Написать программу вычисления количества печатаемых символов в файле #5
Если так:
C++
1
2
3
4
5
6
7
8
// посимвольно читаем файл
    while (true)
    {
        ch = fileIn.get();
        if (fileIn.eof()) break;
        if  ( isprint((unsigned char)ch ) ) // если очередной символ печатаемый
            ++count; // то увеличиваем счетчик печатаемых символов
    }
UranFlex
131 / 129 / 21
Регистрация: 25.05.2013
Сообщений: 233
12.09.2013, 17:06     Написать программу вычисления количества печатаемых символов в файле #6
да, так работает, но откуда берется 1 в предыдущем случае, когда компилирую minGW Win7, еще не понял.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
12.09.2013, 17:42     Написать программу вычисления количества печатаемых символов в файле #7
Это мой косяк. Меня имя переменной ввело в заблуждение: ch. Подумал, что это char. int не нужно приводить к unsigned char. Если использовать char, то без такого приведения, функции cctype, выдают ошибку с кодами больше 127 (в частности, с русскими символами), но это только с компиляторами, у которых char знаковый. С int же здесь происходит следующее: считывается EOF (-1), приводится к unsigned char, получается 255, счётчик увеличивается.
UranFlex
131 / 129 / 21
Регистрация: 25.05.2013
Сообщений: 233
12.09.2013, 17:50     Написать программу вычисления количества печатаемых символов в файле #8
Действительно, теперь лишняя единица исчезла.
CheshireCat
Эксперт С++
2907 / 1235 / 78
Регистрация: 27.05.2008
Сообщений: 3,309
12.09.2013, 17:56     Написать программу вычисления количества печатаемых символов в файле #9
С русскими символами в Лине все еще хитрее. По умолчанию, там кодировка UTF-8, и один русский символ кодируется несколькими (двумя?) байтами строки. При этом, одиночный байт строки может быть и непечатаемым символом....
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.09.2013, 20:43     Написать программу вычисления количества печатаемых символов в файле
Еще ссылки по теме:

Написать рекурсивную функцию вычисления количества цифр натурального числа C++
C++ Написать рекурсивную функцию вычисления количества цифр натурального числа
C++ Подсчет количества символов русского алфавита в текстовом файле

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

Или воспользуйтесь поиском по форуму:
UranFlex
131 / 129 / 21
Регистрация: 25.05.2013
Сообщений: 233
12.09.2013, 20:43     Написать программу вычисления количества печатаемых символов в файле #10
CheshireCat, про это знаю, но как с этим работать пока не придумал.
Yandex
Объявления
12.09.2013, 20:43     Написать программу вычисления количества печатаемых символов в файле
Ответ Создать тему
Опции темы

Текущее время: 04:57. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru