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

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

Войти
Регистрация
Восстановить пароль
 
sovaz1997
CEO SOVAZ Corp.
380 / 226 / 2
Регистрация: 17.12.2011
Сообщений: 819
Записей в блоге: 1
Завершенные тесты: 1
#1

Подсчет символов UTF-8. Считывание пробельных символов - C++

06.01.2016, 13:43. Просмотров 288. Ответов 2

Написал программу считывания файла с кодировкой UTF-8. Но она не считывает пробельные символы. Программа получает на вход файл из стандартного потока ввода.

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
#include <iostream>
 
using namespace std;
 
int getBytes(unsigned char c) {
    if(c >= 252) return 6;
    else if(c >= 248) return 5;
    else if(c >= 240) return 4;
    else if(c >= 224) return 3;
    else if(c >= 192) return 2;
    else return 1;
}
 
int main() {
    unsigned char a;
    
    /*
    
    ------------------UTF-8-----------------
    0xxxxxxx - 1 байт - (>= 000) - <000-191>
    110xxxxx - 2 байт - (>= 192) - <192-223>
    1110xxxx - 3 байт - (>= 224) - <224-239>
    11110xxx - 4 байт - (>= 240) - <240-247>
    111110xx - 5 байт - (>= 248) - <248-251>
    1111110x - 6 байт - (>= 252) - <252-255>
    ----------------------------------------
    
    */
    
    int bytes = 0;
    int res = 0;
    
    while(cin >> a) {
        if(bytes == 0) {
            ++res;
        }
        
        if(bytes == 0) {
            bytes = getBytes(a);
        }
        
        cout << (int)a << " ";
        bytes--;
    }
    
    cout << res << "\n";
}
Добавлено через 1 час 23 минуты
Я справился, можно закрыть тему
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.01.2016, 13:43
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Подсчет символов UTF-8. Считывание пробельных символов (C++):

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

Из UTF-8 коды символов CP866 - C++
Подскажите плиз. Есть строка в UTF-8, из нее необходимо получить char состоящий из кодов этих символов в CP866 Мысли такие, с помощью...

Вывод UTF-8 символов на стандартное ус-во - C++
У K&amp;R если задание на подсчёт каждого символа из стандартного потока. // K&amp;R. Программа подсчитует количество каждого символа // из...

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

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

Считывание символов с файла. - C++
привет. задача состоит в том, что бы заполнить файл любыми символами, а потом там найти определенное слово. например в файле написано:...

2
zss
Модератор
Эксперт С++
6400 / 5966 / 1943
Регистрация: 18.12.2011
Сообщений: 15,357
Завершенные тесты: 1
06.01.2016, 14:20 #2
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от sovaz1997 Посмотреть сообщение
Я справился
 Комментарий модератора 
П. 4.11. Правил
Если вопрос был решен вами самостоятельно, отпишите об этом в своей теме - есть и другие люди, которые столкнутся с той же проблемой, и им поможет ваш ответ.

Это довольно распространенный вопрос.
Чтобы считывать пробельные символы, надо читать строку целиком.
1
sovaz1997
CEO SOVAZ Corp.
380 / 226 / 2
Регистрация: 17.12.2011
Сообщений: 819
Записей в блоге: 1
Завершенные тесты: 1
06.01.2016, 14:30  [ТС] #3
Полный код моей программы (на C)

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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#include <stdio.h>
 
int getBytes(unsigned char c) {
    if(c >= 252) return 6;
    else if(c >= 248) return 5;
    else if(c >= 240) return 4;
    else if(c >= 224) return 3;
    else if(c >= 192) return 2;
    else return 1;
}
 
int isWord(int a) {
    return a != ' ' && a != ',' && a != '\n';
}
 
int isNoWord(int a) {
    return a == ' ' || a == ',' || a == '\n';
}
 
int main() {
    int a;
    a = getchar();
    
    /*
    
    ------------------UTF-8-----------------
    0xxxxxxx - 1 байт - (>= 000) - <000-191>
    110xxxxx - 2 байт - (>= 192) - <192-223>
    1110xxxx - 3 байт - (>= 224) - <224-239>
    11110xxx - 4 байт - (>= 240) - <240-247>
    111110xx - 5 байт - (>= 248) - <248-251>
    1111110x - 6 байт - (>= 252) - <252-255>
    ----------------------------------------
    
    */
    
    char ch;
    float res = 0;
    ch = getchar();
    if(!isWord(ch)) {++res;}
    
    float num_words = 0;
    
    int bytes = 0;
    
    float state = 0;
    if(!isWord(a)) {--res;}
    
    do {
    
        if(bytes == 0) {
            ++res;
        }
        
        if(bytes == 0) {
            bytes = getBytes(a);
        }
        
        bytes--;
        
        if(state == 0) {
            if(isWord(a)) {
                state = 1;
                ++num_words;
            }
        } else if(state == 1) {
 
            if(isWord(a)) {state = 2;}
            else {state = 0;}
        } else if(state == 2) {
            if(isNoWord(a)) {
                state = 0;
            }
        }
        if(!isWord(a)) {--res;}
        a = getchar();
    } while(a != EOF);
    
    printf("%f\n", res / num_words);
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.01.2016, 14:30
Привет! Вот еще темы с ответами:

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

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

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

Не работает подсчет символов - C++
В учебнике Керна дается такой пример для подсчета символов. В результате в консоли ничего не подсчитывается. #include &quot;stdafx.h&quot; ...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

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