Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/25: Рейтинг темы: голосов - 25, средняя оценка - 4.80
 Аватар для serga_70
2 / 2 / 0
Регистрация: 28.11.2019
Сообщений: 47

Функция islower() не обрабатывает кириллицу

29.11.2019, 18:38. Показов 5058. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Коллеги!
Функция islower() не обрабатывает кириллицу.
В консоли стоит нужный шрифт.
Испробовал и функции wctype.h, и windows.h с раскладкой 1251....
С русскими буквами не работает. С английскими работает.
Помогите, кто может! Кто может, помогите!!
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
#include <locale.h>
#include <ctype.h>
 
int main(void)
{
    char ch;
 
    setlocale(LC_ALL, "");
 
    printf("Введите букву в нижнем регистре.\n");
    ch = getchar();
    if (islower(ch))
        putchar(ch);
    else
        printf("это не нижний регистр!\n");
    return 0;
}
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
29.11.2019, 18:38
Ответы с готовыми решениями:

Программа не обрабатывает кириллицу
Всем привет. У меня такая проблема. Программа не хочет обрабатывать кириллицу. К примеру, у меня задача, подсчитать в последнем слове...

Функция islower()
Функция islower() возвращает 2 при любой вводимой строчной букве,так и должно быть?Я знаю,что функция выводит ненулевое значение,если буква...

Функция islower
#include &lt;iostream&gt; // для оператора cout #include &lt;cctype&gt; // для функции islower using namespace std; int main(){ char c; ...

16
Эксперт CЭксперт С++
 Аватар для liv
5120 / 4574 / 855
Регистрация: 07.10.2015
Сообщений: 9,462
29.11.2019, 20:27
serga_70, могу предложить такой вариант:
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
#define WIN32_LEAN_AND_MEAN
#include <Windows.h>
#include <iostream>
 
using namespace std;
 
int main(void)
{
    unsigned char ch;
    char str[4];
    str[1] = 0;
 
    setlocale(LC_ALL, "rus_rus.1251");
    cout << "Введите букву в нижнем регистре." << endl;
    ch = getchar(); //ch в кодировке 866!
    if (_islower_l(ch, _get_current_locale()))
    {
        str[0] = ch;
        OemToCharA(str, str); //str в кодировке 1251!
        cout << str << endl;
    }
    else
        cout << "это не нижний регистр!" << endl;
    system("pause");
    return 0;
}
1
 Аватар для serga_70
2 / 2 / 0
Регистрация: 28.11.2019
Сообщений: 47
29.11.2019, 21:41  [ТС]
Спасибо за ответ, но не работает.
0
Эксперт CЭксперт С++
 Аватар для liv
5120 / 4574 / 855
Регистрация: 07.10.2015
Сообщений: 9,462
29.11.2019, 23:46
serga_70, у меня работает, странно...
0
 Аватар для COKPOWEHEU
4084 / 2682 / 432
Регистрация: 09.09.2017
Сообщений: 11,933
30.11.2019, 02:41
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
#include <wchar.h>
#include <wctype.h>
#include <locale.h>
 
int main(int argc, char **argv){
  setlocale(LC_ALL, "");
  wchar_t str[] = L"Text Текст";
  printf("%S\n", str);
  for(wchar_t *cur=str; cur[0]!=L'\0'; cur++){
    printf("%c", iswlower(cur[0])?'_':'^');
  }
  printf("\n");
}
Code
1
2
3
4
$ gcc main.c
$ ./a.out 
Text Текст
^___^^____
1
 Аватар для serga_70
2 / 2 / 0
Регистрация: 28.11.2019
Сообщений: 47
30.11.2019, 08:04  [ТС]
Вы знаете, коллега, Ваша программа работает. Но моя почему то не работает.
Что не так то??
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>
#include <locale.h>
#include <wctype.h>
#include <wchar.h>
 
int main(void)
{
    wchar_t ch;
 
    setlocale(LC_ALL, "");
 
    printf("Введите букву в нижнем регистре.\n");
    ch = getchar();
    if (iswlower(ch))
        putchar(ch);
    else
        printf("это не нижний регистр!\n");
    return 0;
}
Миниатюры
Функция islower() не обрабатывает кириллицу  
0
 Аватар для serga_70
2 / 2 / 0
Регистрация: 28.11.2019
Сообщений: 47
30.11.2019, 08:21  [ТС]
Странно. Сегодня экспериментировал по разному. Если считывать русскую букву с клавиатуры и выводит на экран, то все нормально. А обработка их функциями не происходит. Попробовал if else тот же результат. Что не так то???
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
#include <stdio.h>
//#include <locale.h>
#include <wctype.h>
#include <wchar.h>
#include <Windows.h>
 
int main(void)
{
    wchar_t ch;
 
    //setlocale(LC_ALL, "");
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
    printf("Введите букву в нижнем регистре.\n");
    //ch = getchar();
    scanf_s("%wc", &ch, sizeof ch);
    //if (iswlower(ch))
    if (ch >= 'а' && ch <= 'я')
            //putchar(ch);
            printf("%wc", ch);
    else
        printf("это не нижний регистр!\n");
    return 0;
}
0
 Аватар для COKPOWEHEU
4084 / 2682 / 432
Регистрация: 09.09.2017
Сообщений: 11,933
30.11.2019, 09:39
Цитата Сообщение от serga_70 Посмотреть сообщение
wchar_t ch;
SetConsoleCP(1251);
wchar_t это utf-32 (изредка utf-16), но уж никак не cp1251
Цитата Сообщение от serga_70 Посмотреть сообщение
ch >= 'а'
тип ch - wchar_t, а тип 'a' - char (еще и не влезет в char). Чтобы перевести в wchar_t используйте букву L перед строкой или символом: L"Some string" L'a'
Цитата Сообщение от serga_70 Посмотреть сообщение
scanf_s
Не используйте нестандартные функции, особенно когда стандартные работают ничуть не хуже
.
Еще проверьте кодировку своего файла исходного кода, она должна соответствовать используемой внутри. Для вывода в консоль еще стоит проверить выставлен ли ей шрифт с юникодом и, возможно, надо будет добавить system("chcp 65000"); Я попытался это проверить у себя, но на winXP в виртуальной машине не сработало, придется вам экспериментировать самостоятельно.
1
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,035
Записей в блоге: 1
30.11.2019, 11:25
wchar_t это utf-32 (изредка utf-16
На всех windows (кроме самых древних с UCS-2) - это изредка, да? )))
Под линоюниксами utf-32, под windows utf-16.
тип 'a' - char
int
0
 Аватар для serga_70
2 / 2 / 0
Регистрация: 28.11.2019
Сообщений: 47
30.11.2019, 11:42  [ТС]
Коллеги! Коллеги!
У меня программа не работает! Не с L не без L, не с бубном не без бубна...
У меня Windows 10, Visual Studio 2019. Это к слову о scanf_s().
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,035
Записей в блоге: 1
30.11.2019, 13:59
Цитата Сообщение от serga_70 Посмотреть сообщение
У меня Windows 10
Какая там кодировка в консоли?
0
 Аватар для serga_70
2 / 2 / 0
Регистрация: 28.11.2019
Сообщений: 47
30.11.2019, 14:10  [ТС]
866. Шрифт Consolas. И в Visual Studio 2019 и в командной строке.
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,977
30.11.2019, 16:22
Кривой ОС - кривые решения!
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
#include <ctype.h>
#include <locale.h>
#include <stdlib.h>
#include <Windows.h>
 
int main(void) {
    char msg[256] = "Введи слово с буквами в разных регистрах:";
    unsigned char * ptr;
 
    setlocale(LC_ALL, "Russian");
 
    printf("%s\n", msg);
    scanf("%255s", msg);
    OemToChar(msg, msg);
    for ( ptr = (unsigned char*)msg; *ptr; ++ptr ) 
        putchar(isupper(*ptr) ? 'U' : 'L');
    putchar('\n');
 
    system("pause");
    return 0;
}
0
 Аватар для serga_70
2 / 2 / 0
Регистрация: 28.11.2019
Сообщений: 47
30.11.2019, 16:34  [ТС]
Дружище!
А можешь подсказать конкретно, что в моей программе не так?? И какие операторы поменять?
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,536
Записей в блоге: 1
30.11.2019, 16:55
Лучший ответ Сообщение было отмечено serga_70 как решение

Решение

serga_70, вместо wchar у тебя char
вместо getwchar - getchar
зачем вообще ты с этим getchar связался?
0
 Аватар для serga_70
2 / 2 / 0
Регистрация: 28.11.2019
Сообщений: 47
30.11.2019, 18:24  [ТС]
Брателла!!!
Ты убил мою печать!!!!!

Еще не видел таки функций getwchar() и putwchar(), но это позволило заработать программе!!!!
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>
#include <wctype.h>
#include <wchar.h>
#include <Windows.h>
 
int main(void)
{
    wchar_t ch;
    
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
    printf("Введите букву в нижнем регистре.\n");
    ch = getwchar();
    if (iswlower(ch))
        putwchar(ch);
    else
        printf("это не нижний регистр!\n");
    return 0;
}
Изображения
 
0
 Аватар для serga_70
2 / 2 / 0
Регистрация: 28.11.2019
Сообщений: 47
30.11.2019, 18:26  [ТС]
Kuzia domovenok, Спасибо за помощь!!!!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
30.11.2019, 18:26
Помогаю со студенческими работами здесь

Функция islower()
Подскажите пожалуйста пример работы этой функции , в программе Visual Studio 2012 C++ (Консольный проект). В учебнике написано нужно...

Функция не обрабатывает переменную
&lt;?php function word() { $words = array( 'системы отопления', 'электрическое...

функция перевода с латиницы на кириллицу
есть ли какая то функция перевода с латиницы на кириллицу('ghbdtn' перевело в 'привет')? по гуглу полазил много скриптов видел но ни один...

Функция mysql_fetch_assoc обрабатывает только первую строку
Здравствуйте. Может кто поможет, уже всю голову поломал. Есть запрос к базе данных: $query = mysql_query(&quot;SELECT поле1, поле2,...

Функция ЕСЛИ обрабатывает только две столбца
=ЕСЛИ(G3&lt;=10;B4;ЕСЛИ(G3&gt;=11;C4;ЕСЛИ(G3&lt;=20;C4;ЕСЛИ(G3&gt;=21;D4 ;ЕСЛИ(G3&lt;=30;D4 ;ЕСЛИ(G3&gt;=31;E4;ЕСЛИ(G3&lt;=70;E4;ЕСЛИ(G3&gt;70;F4)))))))) ...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача №1: при указании работ (справочник РаботыПоРемонтуСпецтехники),. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru