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

Аналог функции isalpha() (<cctype>) - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Дана матрица целых чисел, из n строк и n столбцов (n < = 100).Определить является ли матрица нулевой (состоит из одних нулей) http://www.cyberforum.ru/cpp-beginners/thread1044233.html
#include <iostream.h> #include <iomanip.h> #include <stdlib.h> int main(int argc, char* argv) { srand(time(NULL)); int mas; int N; bool flag = true; int max_element, count_max_element = 0;
C++ Преобразовать строку в массив слов Доброго времени суток. Не могу разобраться, помогите, пожалуйста, как преобразовать строку в mas, где x-номер слова, а y-номер буквы в слове. http://www.cyberforum.ru/cpp-beginners/thread1044232.html
Класс string из библиотеки STL C++
Дан массив слов и подстрока. Сформировать предложение из слов, содержащих заданную подстроку не более двух раз (каждая буква может входить только в одну подстроку), поменяв предварительно во всех словах с четной длиной символы попарно местами. Слова в предложении должны быть отсортированы по возрастанию длины слов.Реализовать обработку символьной информации с использованием класса string из...
Алгоритм сжатия. BWT преобразование и компрессор C++
Некорректо работает декодирование,хотя должно быть все нормально,кто заметил ошибку прошу подсказать)) Декодирование с 56 строчки #include "stdafx.h" #include <iostream> #include <fstream> #include <string> #include <string.h> #include <conio.h> using namespace std;
C++ Дан одномерный массив A (n) подсчитать кол-во не совершенных чисел в нём (совершенные = сумме своих делителей http://www.cyberforum.ru/cpp-beginners/thread1044216.html
Дан одномерный массив A (n) подсчитать кол-во не совершенных чисел в нём (совершенные = сумме своих делителей)
C++ Производный класс Доброго времени суток) Помогите реализовать производный класс Vector, который сможет переписать двумерный массив в одномерный и напечатать его. И еще вопрос: как в конструкторе написать значения по умолчанию? подробнее

Показать сообщение отдельно
DPS
 Аватар для DPS
32 / 32 / 3
Регистрация: 12.11.2011
Сообщений: 107
Завершенные тесты: 1
16.12.2013, 19:28     Аналог функции isalpha() (<cctype>)
Здравствуйте) Я так понял, функция isalpha() не работает с русскими буквами(?), пришлось написать свою версию для работы с русскими символами.
Посмотрите, пожалуйста, если будет время мой код(нормально ли он работает?). Правильно ли создавать две версии функции - для char и для unsigned char, или вообще можно как-то заставить работать функцию isalpha() с русскими буквами?


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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
#include<iostream>
#include<conio.h>       //для getch()
#include<Windows.h>     //SetConsoleTextAttribute
#include<iomanip>       //для setw()
 
using namespace std;
 
//ширина полей вывода
const size_t MAX1 = 4;      
const size_t MAX2 = 2;
 
//функции, определяющие, является ли символ буквой
//если символ - буква, возвращают true
//поскольку коды ansi у знаковых и беззнаковых различаются символов, 
//необходимо создать две функции
bool letter(char ch);
bool letter(unsigned char ch);      //перегруженная
 
 
 
int main()
{
    char ch_1           = 0;        //знаковая переменная
    unsigned char ch_2  = 0;        //и беззнаковая
 
    int counter = 0;        //счетчик, если == 4, переход на новую строку
 
    //если символ - буква, будем разукрашивать его зеленым)
    HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
    SetConsoleTextAttribute(handle, 15);                //ставим белый цвет на черном фоне
 
    //сначала проверяем тип char
 
    cout << "**********************************************************************" << endl;
    cout << "**************************char****************************************" << endl;
    cout << "**********************************************************************" << endl;
    cout << endl;
 
    do{
        if( letter(ch_1) )                              //если символ - буква
        {
            SetConsoleTextAttribute(handle, 266);       //разукрашиваем зеленым
        }
        else
            SetConsoleTextAttribute(handle, 15);        //если нет, оставляем белый 
 
        cout << setw(MAX1) << static_cast<int>(ch_1) << " - " << setw(MAX2) << ch_1 << "\t";
        
        ++ch_1;
        ++counter;
 
        if(counter == 4)
        {
            counter = 0;
            cout << endl;
        }
    }while(ch_1);
 
    
    //а теперь проверяем тип unsigned char
    counter = 0;        //обнуляем счетчик
 
    cout << "**********************************************************************" << endl;
    cout << "****************unsigned char****************************************" << endl;
    cout << "**********************************************************************" << endl;
    cout << endl;
 
    do{
        if( letter(ch_2) )                              //если символ - буква
        {
            SetConsoleTextAttribute(handle, 266);       //разукрашиваем зеленым
        }
        else
            SetConsoleTextAttribute(handle, 15);        //если нет, оставляем белый 
 
        cout << setw(MAX1) << static_cast<int>(ch_2) << " - " << setw(MAX2) << ch_2 << "\t";
        
        ++ch_2;
        ++counter;
 
        if(counter == 4)
        {
            counter = 0;
            cout << endl;
        }
    }while(ch_2);
 
 
    _getch();
 
    return 0;
}
 
 
 
 
bool letter(char ch)            //функция для знакового char
{
    if( (ch >= 65) && (ch <= 90) || (ch >= 97) && (ch <=122) )              //проверяем англ. буквы
        return true;
    else if( (ch >= -128) && (ch <= -81) || (ch >= -32) && (ch <= -15) )    //и русские
        return true; 
    else
        return false;                                                       //если не буква -> false
}
 
 
bool letter(unsigned char ch)   //перегруженная для беззнакового char
{
    if( (ch >= 65) && (ch <= 90) || (ch >= 97) && (ch <=122) )              //проверяем англ. буквы
        return true;
    else if( (ch >= 128) && (ch <= 175) || (ch >= 224) && (ch <= 241) )     //и русские
        return true; 
    else
        return false;                                                       //если не буква -> false
}
Миниатюры
Аналог функции isalpha() (<cctype>)   Аналог функции isalpha() (<cctype>)  
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 15:04. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru