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

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

Войти
Регистрация
Восстановить пароль
 
Анастасия21
0 / 0 / 0
Регистрация: 11.09.2013
Сообщений: 8
#1

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

11.09.2013, 18:58. Просмотров 1044. Ответов 9
Метки нет (Все метки)

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

Составить программу для вычисления количества арабских цифр в введенном с клавиатуры строке символов - C++
Привет всем )) Нужна помощь Задача (язык С + +). Составить программу для вычисления количества арабских цифр в введенном с клавиатуры...

Написать программу, подсчитывающую количества слов в текстовом файле - C++
Написать программу, подсчитывающую количества слов в текстовом файле. Нужно использовать File-New-Aplication + добавить кнопки и т д. ...

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

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

Написать программу подсчета количества строк в файле (желательно, не используя буферы) - C++
Добрый день. У меня такая проблема, нужно посчитать количество строк в файле, но без буферизации, так как файл может быть очень большим....

Написать программу для вычисления количества элементов массива, дробная часть которых меньше 0,1 - C++
Дан массив размером 4x4 с элементами вещественного типа. Написать программу для вычисления количества элементов массива, дробная часть...

9
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;
}
0
alsav22
5421 / 4816 / 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 должен быть рядом с исполняемым файлом
Если из среды запускать, то в папке проекта.
0
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;
}
0
alsav22
5421 / 4816 / 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; // то увеличиваем счетчик печатаемых символов
    }
0
UranFlex
131 / 129 / 21
Регистрация: 25.05.2013
Сообщений: 233
12.09.2013, 17:06 #6
да, так работает, но откуда берется 1 в предыдущем случае, когда компилирую minGW Win7, еще не понял.
0
alsav22
5421 / 4816 / 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, счётчик увеличивается.
1
UranFlex
131 / 129 / 21
Регистрация: 25.05.2013
Сообщений: 233
12.09.2013, 17:50 #8
Действительно, теперь лишняя единица исчезла.
0
CheshireCat
Эксперт С++
2893 / 1242 / 78
Регистрация: 27.05.2008
Сообщений: 3,379
12.09.2013, 17:56 #9
С русскими символами в Лине все еще хитрее. По умолчанию, там кодировка UTF-8, и один русский символ кодируется несколькими (двумя?) байтами строки. При этом, одиночный байт строки может быть и непечатаемым символом....
0
UranFlex
131 / 129 / 21
Регистрация: 25.05.2013
Сообщений: 233
12.09.2013, 20:43 #10
CheshireCat, про это знаю, но как с этим работать пока не придумал.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.09.2013, 20:43
Привет! Вот еще темы с ответами:

Подсчет количества символов в файле - C++
дан файл в нем содержится допустим 40 символов нужно чтоб программа подсчитала количество символов в файле и вывела на экран это количество...

Подсчет количества символов русского алфавита в текстовом файле - C++
Здравствуйте, нужна ваша помощь) Допустим у нас имеется текстовой файл Test.txt( в нем находятся русские буквы и другие... символы и...

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

Написать рекурсивную функцию вычисления количества цифр натурального числа - C++
Как написать рекурсивную функцию вычисления количества цифр натурального числа?


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

Или воспользуйтесь поиском по форуму:
10
Yandex
Объявления
12.09.2013, 20:43
Ответ Создать тему
Опции темы

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