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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Найти заданное число членов ряда http://www.cyberforum.ru/cpp-beginners/thread1632614.html
Задача: Ввести вещественные числа x (-1≤x≤1) и натуральное число N >0. Найти N первых членов ряда. Нужно чтобы начиналось таким образом и использовать нужно оператор while и не использовать операторов возведения в степень. #include <stdio.h> int main (void)
C++ Как проще всего работать с Big-Endian C++ ? С++. Как проще всего работать с Big-Endian, используя стандартные операции ? http://www.cyberforum.ru/cpp-beginners/thread1632605.html
C++ Сортировка массива структур (файловый ввод/вывод)
Здравствуйте помогите пожалуйста разобраться с программой которая записывать ФИО в файл проблема в fwrite(&Stud,sizeof(TStudent),1,Fs); ошибка Unit1.cpp(48): W8060 Possibly incorrect assignment //--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include <math.h> #include "Unit1.h" #include<stdio.h>;...
C++ Локальные переменные или прямое обращение к get-объекта класса?
Собственно, что лучше? Создавать локальные переменные и хранить там значения, полученные из экземпляра или напрямую обращаться к полям объекта? Например: void Array::operator +(Array value) { int sizeFirst = getSize(); int sizeSecond = value.getSize(); if(sizeFirst > sizeSecond)
C++ Правильное использование throw и abort http://www.cyberforum.ru/cpp-beginners/thread1632578.html
Всем привет, тут такой вопрос возник: когда я хочу прервать программу, я могу воспользоваться exit(0), но он перед завершением должен вызвать деструкторы нелокальных переменных, если я их вызывать не хочу, то я могу использовать abort(). Но вот когда я его использую, у меня при выполнении программы выдается предупреждение, скажите его как то можно избежать, или оно всегда выдается, из-за того,...
C++ Перемещение каретки мыши по координатам в Linux Стоит Eclipse C/C++. Собираюсь сделать игру типа Adom, Dwarf Fortress, но мешает одно, не знаю как переместить каретку в определенные координаты консоли. Решение типа: void goto( short x, short y ) { HANDLE hStdout = GetStdHandle(STD_OUTPUT_HANDLE) ; COORD position = { x, y } ; SetConsoleCursorPosition( hStdout, position ) ; } Не подходит, т.к. нет Windows.h (Linux все таки).... подробнее

Показать сообщение отдельно
sovaz1997
CEO SOVAZ Corp.
 Аватар для sovaz1997
379 / 225 / 2
Регистрация: 17.12.2011
Сообщений: 816
Записей в блоге: 1
06.01.2016, 14:30  [ТС]     Подсчет символов UTF-8. Считывание пробельных символов
Полный код моей программы (на 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);
}
 
Текущее время: 18:01. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru