Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 46, средняя оценка - 4.89
breeve
75 / 75 / 29
Регистрация: 01.08.2009
Сообщений: 177
#1

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

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

Необходимо изменить регистр на нижний. Как только не пробовал не получается.
Получается если я задаю строку заранее, что на русском что на английском все работает. Если считываю с клавиатуры, на английском работает на русском - нет.
http://www.cyberforum.ru/cpp-beginners/thread226709.html

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") то работает и тот способ и другой. Но необходимо сделать без сэтлокаля.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.09.2009, 10:32
Я подобрал для вас темы с готовыми решениями и ответами на вопрос функция tolower() (C++):

Tolower для русских букв
Есть символьный массив с русскими буквами: &quot;Сегодня Прекрасная Погода&quot;. Мне...

toupper, tolower, strlen и кириллица
Эти три функции не хотят нормально работать с кириллицей. Если им скормить...

Функции tolower,islower,isupper
Если кто знаком с функциями tolower,islower,isupper, дайте пожалуйста с каждой...

Найти первые вхождения символов (функции strchr(), tolower())
В массиве строк , введенных пользователем , найти первые вхождения символов '...

Заменить функцию tolower на ручную функцию
В общем проблема такова. Tolower работает только с англ.яз вводимых данных. А...

4
Rififi
2363 / 1056 / 104
Регистрация: 03.05.2009
Сообщений: 2,656
25.09.2009, 10:50 #2
Но необходимо сделать без сэтлокаля.

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

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

Добавлено через 20 минут
Вообщем необходимо либо считать с клавиатуры в ср1251, либо ковертировать строку на русском языке в кодировке ср866 в нижний регистр.
0
easybudda
Модератор
Эксперт CЭксперт С++
10021 / 5944 / 1483
Регистрация: 25.07.2009
Сообщений: 11,230
25.09.2009, 12:45 #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;
}
1
RustamValiev
0 / 0 / 0
Регистрация: 02.02.2016
Сообщений: 2
01.11.2016, 13:33 #5
setlocale(LC_ALL, "rus");

(нужно установить локаль, иначе "система не знает" какие символы - строчные, какие - прописные)
0
01.11.2016, 13:33
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.11.2016, 13:33
Привет! Вот еще темы с решениями:

Функция sqrt: существует более одного экземпляра. Функция перегруженная
#include &lt;iostream&gt; #include &lt;math.h&gt; #include &lt;iomanip&gt; using namespace...

Перегрузка операций: friend-функция или функция-член класса
Здравствуйте, меня интересует вопрос, в чем разница при перегрузке операторов...

Функция удаления текста в скобках [2], непосредственно функция + 12кб вложений
Доброго времени суток, случилось так, что пришлось работать с с-строками (лаба,...

Какую библиотеку надо подключать чтоб работала функция _getch() и функция cin.get()?
какую библиотеку надо подключать чтоб работала функция _getch() и функция...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru