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

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

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

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

25.09.2009, 10:32. Просмотров 5871. Ответов 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()
Посмотрите здесь:

Как реализовать tolower()? - C++
Подскажите, пожалуйста, как применить функцию tolower() к переменной типа vector&lt;int&gt;::size_type Вот фрагмент кода, приводящий к ошибке:...

Функции tolower,islower,isupper - C++
Если кто знаком с функциями tolower,islower,isupper, дайте пожалуйста с каждой примитивный пример с маленьким коментом, как их...

toupper, tolower, strlen и кириллица - C++
Эти три функции не хотят нормально работать с кириллицей. Если им скормить американские литеры, все нормально. Но вот, например, эта...

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

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

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

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

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

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

Добавлено через 20 минут
Вообщем необходимо либо считать с клавиатуры в ср1251, либо ковертировать строку на русском языке в кодировке ср866 в нижний регистр.
easybudda
Эксперт CЭксперт С++
9466 / 5479 / 927
Регистрация: 25.07.2009
Сообщений: 10,504
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;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.11.2016, 13:33     функция tolower()
Еще ссылки по теме:

Написать собственную функцию ToLower - C#
Как создать метод, типа &quot;собственный ToLower&quot;, что бы в строке строчные буквы английского алфавита заменялись на соответствующие им...

Как использовать ToLower и ToUpper? - PascalABC.NET
Приведите пожалуйста пример как использовать ToLower и ToUpper Попробовал так var s:string; begin s:='AvbDv'; s:=ToLower(s); ...

Как правильно использовать ToLower/ToUpper? - C#
using System; class VideoSharp { static void Main() { string s1, s2; s1 = Console.ReadLine(); ...

Продемонстрировать работу функций Copy, EndsWith, ToLower - C#
Продемонстрировать работу таких функций : Copy, EndsWith, ToLower

Функция sqrt: существует более одного экземпляра. Функция перегруженная - C++
#include &lt;iostream&gt; #include &lt;math.h&gt; #include &lt;iomanip&gt; using namespace std; int main(){ float s, p; int c, a; s=0; ...

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


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

Или воспользуйтесь поиском по форуму:
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()
Ответ Создать тему
Опции темы

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