1

Тема: ASCII кирилиця

Програма звіряє лише з латинськими  буквами, а з кирилицею не хоче, а мені треба :)

#include <iostream>
#include <string.h>
using namespace std;

void main()
{  

    int size, i, answer,q;
    char os[90], os2[90], *sos, *sos2;
    cout << "Vvedit TEXT\n";
    gets_s(os);
    sos = os; 
    size = strlen(os) + 1;
    for (i = 0; i < 90; i++)
    {
        os2[i] = os[i];
    }
    sos2 = os2;  
    cout << endl << "size: "<< size<<endl<<endl;
     
    do
    {
        cout << "\n1-Zatertu latun'\n2-Zatertu cyrilic\n3-Zaterti simvoly\n4-Zaterty ciferki\n5-quit\n";
        while (1)
        {
            cin >> answer;
            if (answer >= 0 && answer <= 4)
                break;
            else cout << "\nError (1-4)\n";
        }

        switch (answer)
        {

        case 1:
            for (i = 0; i < size; i++)
            { 
                if ((*(sos2 + i)<91 && *(sos2 + i)>64) || (*(sos2 + i) < 126 && *(sos2 + i)>96))
                    *(sos2 + i) = '_'; 
            }
            cout << "\nReady:\n";
            cout << sos2;
            break;

        case 2:
            for (i = 0; i < size; i++)
            {
                if (*(sos2 + i)>192 && *(sos2 + i)<225)
                    *(sos2 + i) = '_';
            }
            cout << "\nReady:\n";
            cout << sos2;
            break;
        }

    } while (answer != 5);



    cout << sos2;
 
    cout << endl;
    system("pause");
}

2

Re: ASCII кирилиця

Якийсь незрозумілий діапазон значень для кирилиці. Це в якому кодуванні?
Для віндової консольної кирилиці (cp866) має бути 128...175, 224...247.

3

Re: ASCII кирилиця

Спробуйте..

void main()
{
setlocale(LC_CTYPE, "ukr");
//далі ваш код

4

Re: ASCII кирилиця

VTrim написав:

Спробуйте..

void main()
{
setlocale(LC_CTYPE, "ukr");
//далі ваш код

з цим взагалі кирилицю перетворює на каралючкі

5

Re: ASCII кирилиця

Кілька порад стосовно читаності коду:

*(sos2 + i)<91 && *(sos2 + i)>64

значно красивіше виглядає як

( 'A' <= sos2[ i ] ) && ( sos2[ i ] <= 'Z' )

- індексна форма запису sos2[ i ] замість арифметики вказівників *(sos2+i) - арифметика вказівників реально потрібна лише в низькорівневому та/або системному коді; у вас же тут не шматок пам'яті, а рядок - то і працювати з ним слід як із рядком;
- символи замість незрозумілих кодів;
- інтуїтивне розташування умов (ліва межа < число && число < права межа);
- замість зовнішніх меж (64 - це '@', 91 - це '[') - внутрішні, це дає тут змогу одразу побачити, що це за умова (в інших ситуаціях може бути правильніше і зовнішні межі ставити).
Ну а стосовно вашої проблеми - в ASCII нема кирилиці, вона є тільки в розширених кодуваннях, і вам спершу треба визначитися, в якому кодуванні працює програма і в якому вона написана (а це можуть бути і різні), а потім вже працювати з кирилицею. З огляду на те, що у вас весь вивід латиницею, вже можу припустити, що ці кодування у вас різні.
http://replace.org.ua/topic/2021/ читали?