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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 46, средняя оценка - 4.89
breeve
73 / 73 / 14
Регистрация: 01.08.2009
Сообщений: 177
#1

функция tolower() - C++

25.09.2009, 10:32. Просмотров 5758. Ответов 4
Метки нет (Все метки)

Необходимо изменить регистр на нижний. Как только не пробовал не получается.
Получается если я задаю строку заранее, что на русском что на английском все работает. Если считываю с клавиатуры, на английском работает на русском - нет.

C++
1
2
3
4
5
6
{
  string s;
  getline(cin,s); // ввожу КоЛя
  transform( s.begin(), s.end(), s.begin(), ::tolower );
  cout << s << endl;// выводит КоЛя
}
пробовал еще так: форматировал строку в чар и потом:

C++
1
2
3
4
5
6
 while (ch[i])
{
    c=ch[i];
    putchar (tolower(c));
    i++;
}
если я в начале напишу setlocale(LC_ALL, ".1251") то работает и тот способ и другой. Но необходимо сделать без сэтлокаля.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.09.2009, 10:32     функция tolower()
Посмотрите здесь:

C++ Функции tolower,islower,isupper
Как реализовать tolower()? C++
что за функция такая strstr? или это не функция? C++
какую библиотеку надо подключать чтоб работала функция _getch() и функция cin.get() C++
Нужно сделать, чтобы программа состояла из 3 функций, тоесть 1-ая функция ввода массива, 2-ая основная функция, 3-я- вывод массива C++
C++ Создать производный класс, в котором реализована функция умножения вектора на число и функция сложения двух векторов
C++ toupper, tolower, strlen и кириллица
C++ Tolower для русских букв
C++ Заменить функцию tolower на ручную функцию
C++ Найти первые вхождения символов (функции strchr(), tolower())
Функция заполняющая массив и функция вывода массива C++
Чистая виртуальная функция функция не имеет оператора переопределения C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Rififi
2336 / 1051 / 44
Регистрация: 03.05.2009
Сообщений: 2,656
25.09.2009, 10:50     функция tolower() #2
Но необходимо сделать без сэтлокаля.

ручная перекодировка из cp866
breeve
73 / 73 / 14
Регистрация: 01.08.2009
Сообщений: 177
25.09.2009, 11:13  [ТС]     функция tolower() #3
Цитата Сообщение от Rififi Посмотреть сообщение
Но необходимо сделать без сэтлокаля.

ручная перекодировка из cp866
Ты имеешь ввиду CharToOem? Весь прикол в том что когда я считываю с клавы русское слово и вывожу то он выводит на русском. как я понял когда считываешь он в 866. если меняю на 1251 и вывожу то получается абракадабра. а ее самую он не может опустить)

Добавлено через 20 минут
Вообщем необходимо либо считать с клавиатуры в ср1251, либо ковертировать строку на русском языке в кодировке ср866 в нижний регистр.
easybudda
Эксперт С++
9412 / 5435 / 917
Регистрация: 25.07.2009
Сообщений: 10,428
25.09.2009, 12:45     функция tolower() #4
breeve, вот Вам и tolower и toupper для досовской консоли
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
#include <iostream>
using std::cin;
using std::cout;
using std::endl;
 
#include <string>
using std::string;
 
int toupper866(int c){
    if ( (c >= 160) && (c <= 175) )
        return (c - 32);
    else if ( (c >= 224) && (c <= 239))
        return (c - 80);
    else
        return (toupper(c));
}
 
int tolower866(int c){
    if ( (c >= 128) && (c <= 143))
        return (c + 32);
    else if ( (c >= 144) && (c <= 159))
        return (c + 80);
    else
        return (tolower(c));
}
 
 
int main(){
    string str;
    int i;
    bool stop = false;
    while ( !stop ){
        cout << "Put some string or just q for quit:" << endl;
        getline(cin, str);
        if ( str == "q" )
            stop = true;
        else {
            cout << "Lower case: ";
            for ( i = 0; i < str.size(); i++ )
                cout << ((unsigned char)tolower866((unsigned char)str[i]));
            cout << endl << "Upper case: ";
            for ( i = 0; i < str.size(); i++ )
                cout << ((unsigned char)toupper866((unsigned char)str[i]));
            cout << endl;
        }
    }
 
    return 0;
}
RustamValiev
0 / 0 / 0
Регистрация: 02.02.2016
Сообщений: 2
01.11.2016, 13:33     функция tolower() #5
setlocale(LC_ALL, "rus");

(нужно установить локаль, иначе "система не знает" какие символы - строчные, какие - прописные)
Yandex
Объявления
01.11.2016, 13:33     функция tolower()
Ответ Создать тему
Опции темы

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