Русские буквы в нижний регистр - Visual Studio

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by rudi, 25 Mar 2011.

  1. rudi

    rudi Active Member

    Joined:
    3 Jun 2010
    Messages:
    492
    Likes Received:
    186
    Reputations:
    5
    Хочу написать функцию перевода русских букв в нижний регистр
    Пишу на MS Visual Studio C++ 6

    делаю так


    #include <windows.h>
    #include <ctype.h>
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    setlocale(LC_ALL,"Russian");

    *ptr = tolower(*ptr);


    но почемуто не все буквы переводит в нижний регистр
    например символы РВГ не переводит а вот символ И переводит, странно это всё...

    Кто с этим сталкивался?
    подскажите что не так
     
    #1 rudi, 25 Mar 2011
    Last edited: 25 Mar 2011
  2. fluffylion

    fluffylion Member

    Joined:
    22 Feb 2010
    Messages:
    55
    Likes Received:
    10
    Reputations:
    0
    Возможно это поможет:
    In C++, a locale-specific template version of this function (tolower) exists in header <locale>.
     
  3. rudi

    rudi Active Member

    Joined:
    3 Jun 2010
    Messages:
    492
    Likes Received:
    186
    Reputations:
    5
    Пробывал подключать двумя методами
    #include <locale.h>
    #include <locale>

    и тоже самое
    ничего не изменилось
     
  4. rudi

    rudi Active Member

    Joined:
    3 Jun 2010
    Messages:
    492
    Likes Received:
    186
    Reputations:
    5
    У меня просьба к тем у кого есть MS Visual Studio C++ 6

    откомпилируйте и запустите этот код
    какой у вас будет результат?
    у меня буквы ВГ перевело в нижний регистр
    а вот букву И не перевело

    PHP:
    #include "stdafx.h"
    #include <windows.h>
    #include <ctype.h>
    #include <locale.h>

    int main(int argccharargv[])
    {  
        
    SetConsoleCP(1251);
                 
    SetConsoleOutputCP(1251);
                 
    setlocale(LC_ALL,"Russian");

        
    char Str[]="ВГВГИИИИ";

        for(
    size_t x=0strlen(Str); x++)
            
    Str[x] = tolower(Str[x]);

        return 
    0;
    }
     
  5. greki_hoy

    greki_hoy Member

    Joined:
    4 Mar 2010
    Messages:
    326
    Likes Received:
    57
    Reputations:
    41
    посмотрите разницу между диапазонами OEM кодов и ASCII для OEM она варьируется надо юзать CharLower CharUpper из kernel32.dll а для ASCII надо просто c |= 0x20 c &= ~0x20 для смены регистра
    Code:
      0 0x0 00000000
    ☺ 1 0x1 00000001
    ☻ 2 0x2 00000010
    ♥ 3 0x3 00000011
    ♦ 4 0x4 00000100
    ♣ 5 0x5 00000101
    ♠ 6 0x6 00000110
     7 0x7 00000111
     8 0x8 00001000
             9 0x9 00001001
    
     10 0xa 00001010
    ♂ 11 0xb 00001011
    ♀ 12 0xc 00001100
     13 0xd 00001101
    ♫ 14 0xe 00001110
    ☼ 15 0xf 00001111
    ► 16 0x10 00010000
    ◄ 17 0x11 00010001
    ↕ 18 0x12 00010010
    ‼ 19 0x13 00010011
    ¶ 20 0x14 00010100
    § 21 0x15 00010101
    ▬ 22 0x16 00010110
    ↨ 23 0x17 00010111
    ↑ 24 0x18 00011000
    ↓ 25 0x19 00011001
    → 26 0x1a 00011010
    ← 27 0x1b 00011011
    ∟ 28 0x1c 00011100
    ↔ 29 0x1d 00011101
    ▲ 30 0x1e 00011110
    ▼ 31 0x1f 00011111
      32 0x20 00100000
    ! 33 0x21 00100001
    " 34 0x22 00100010
    # 35 0x23 00100011
    $ 36 0x24 00100100
    % 37 0x25 00100101
    & 38 0x26 00100110
    ' 39 0x27 00100111
    ( 40 0x28 00101000
    ) 41 0x29 00101001
    * 42 0x2a 00101010
    + 43 0x2b 00101011
    , 44 0x2c 00101100
    - 45 0x2d 00101101
    . 46 0x2e 00101110
    / 47 0x2f 00101111
    0 48 0x30 00110000
    1 49 0x31 00110001
    2 50 0x32 00110010
    3 51 0x33 00110011
    4 52 0x34 00110100
    5 53 0x35 00110101
    6 54 0x36 00110110
    7 55 0x37 00110111
    8 56 0x38 00111000
    9 57 0x39 00111001
    : 58 0x3a 00111010
    ; 59 0x3b 00111011
    < 60 0x3c 00111100
    = 61 0x3d 00111101
    > 62 0x3e 00111110
    ? 63 0x3f 00111111
    @ 64 0x40 01000000
    A 65 0x41 01000001
    B 66 0x42 01000010
    C 67 0x43 01000011
    D 68 0x44 01000100
    E 69 0x45 01000101
    F 70 0x46 01000110
    G 71 0x47 01000111
    H 72 0x48 01001000
    I 73 0x49 01001001
    J 74 0x4a 01001010
    K 75 0x4b 01001011
    L 76 0x4c 01001100
    M 77 0x4d 01001101
    N 78 0x4e 01001110
    O 79 0x4f 01001111
    P 80 0x50 01010000
    Q 81 0x51 01010001
    R 82 0x52 01010010
    S 83 0x53 01010011
    T 84 0x54 01010100
    U 85 0x55 01010101
    V 86 0x56 01010110
    W 87 0x57 01010111
    X 88 0x58 01011000
    Y 89 0x59 01011001
    Z 90 0x5a 01011010
    [ 91 0x5b 01011011
    \ 92 0x5c 01011100
    ] 93 0x5d 01011101
    ^ 94 0x5e 01011110
    _ 95 0x5f 01011111
    ` 96 0x60 01100000
    a 97 0x61 01100001
    b 98 0x62 01100010
    c 99 0x63 01100011
    d 100 0x64 01100100
    e 101 0x65 01100101
    f 102 0x66 01100110
    g 103 0x67 01100111
    h 104 0x68 01101000
    i 105 0x69 01101001
    j 106 0x6a 01101010
    k 107 0x6b 01101011
    l 108 0x6c 01101100
    m 109 0x6d 01101101
    n 110 0x6e 01101110
    o 111 0x6f 01101111
    p 112 0x70 01110000
    q 113 0x71 01110001
    r 114 0x72 01110010
    s 115 0x73 01110011
    t 116 0x74 01110100
    u 117 0x75 01110101
    v 118 0x76 01110110
    w 119 0x77 01110111
    x 120 0x78 01111000
    y 121 0x79 01111001
    z 122 0x7a 01111010
    { 123 0x7b 01111011
    | 124 0x7c 01111100
    } 125 0x7d 01111101
    ~ 126 0x7e 01111110
    ⌂ 127 0x7f 01111111
    А 128 0x80 10000000
    Б 129 0x81 10000001
    В 130 0x82 10000010
    Г 131 0x83 10000011
    Д 132 0x84 10000100
    Е 133 0x85 10000101
    Ж 134 0x86 10000110
    З 135 0x87 10000111
    И 136 0x88 10001000
    Й 137 0x89 10001001
    К 138 0x8a 10001010
    Л 139 0x8b 10001011
    М 140 0x8c 10001100
    Н 141 0x8d 10001101
    О 142 0x8e 10001110
    П 143 0x8f 10001111
    Р 144 0x90 10010000
    С 145 0x91 10010001
    Т 146 0x92 10010010
    У 147 0x93 10010011
    Ф 148 0x94 10010100
    Х 149 0x95 10010101
    Ц 150 0x96 10010110
    Ч 151 0x97 10010111
    Ш 152 0x98 10011000
    Щ 153 0x99 10011001
    Ъ 154 0x9a 10011010
    Ы 155 0x9b 10011011
    Ь 156 0x9c 10011100
    Э 157 0x9d 10011101
    Ю 158 0x9e 10011110
    Я 159 0x9f 10011111
    а 160 0xa0 10100000
    б 161 0xa1 10100001
    в 162 0xa2 10100010
    г 163 0xa3 10100011
    д 164 0xa4 10100100
    е 165 0xa5 10100101
    ж 166 0xa6 10100110
    з 167 0xa7 10100111
    и 168 0xa8 10101000
    й 169 0xa9 10101001
    к 170 0xaa 10101010
    л 171 0xab 10101011
    м 172 0xac 10101100
    н 173 0xad 10101101
    о 174 0xae 10101110
    п 175 0xaf 10101111
    ░ 176 0xb0 10110000
    ▒ 177 0xb1 10110001
    ▓ 178 0xb2 10110010
    │ 179 0xb3 10110011
    ┤ 180 0xb4 10110100
    ╡ 181 0xb5 10110101
    ╢ 182 0xb6 10110110
    ╖ 183 0xb7 10110111
    ╕ 184 0xb8 10111000
    ╣ 185 0xb9 10111001
    ║ 186 0xba 10111010
    ╗ 187 0xbb 10111011
    ╝ 188 0xbc 10111100
    ╜ 189 0xbd 10111101
    ╛ 190 0xbe 10111110
    ┐ 191 0xbf 10111111
    └ 192 0xc0 11000000
    ┴ 193 0xc1 11000001
    ┬ 194 0xc2 11000010
    ├ 195 0xc3 11000011
    ─ 196 0xc4 11000100
    ┼ 197 0xc5 11000101
    ╞ 198 0xc6 11000110
    ╟ 199 0xc7 11000111
    ╚ 200 0xc8 11001000
    ╔ 201 0xc9 11001001
    ╩ 202 0xca 11001010
    ╦ 203 0xcb 11001011
    ╠ 204 0xcc 11001100
    ═ 205 0xcd 11001101
    ╬ 206 0xce 11001110
    ╧ 207 0xcf 11001111
    ╨ 208 0xd0 11010000
    ╤ 209 0xd1 11010001
    ╥ 210 0xd2 11010010
    ╙ 211 0xd3 11010011
    ╘ 212 0xd4 11010100
    ╒ 213 0xd5 11010101
    ╓ 214 0xd6 11010110
    ╫ 215 0xd7 11010111
    ╪ 216 0xd8 11011000
    ┘ 217 0xd9 11011001
    ┌ 218 0xda 11011010
    █ 219 0xdb 11011011
    ▄ 220 0xdc 11011100
    ▌ 221 0xdd 11011101
    ▐ 222 0xde 11011110
    ▀ 223 0xdf 11011111
    р 224 0xe0 11100000
    с 225 0xe1 11100001
    т 226 0xe2 11100010
    у 227 0xe3 11100011
    ф 228 0xe4 11100100
    х 229 0xe5 11100101
    ц 230 0xe6 11100110
    ч 231 0xe7 11100111
    ш 232 0xe8 11101000
    щ 233 0xe9 11101001
    ъ 234 0xea 11101010
    ы 235 0xeb 11101011
    ь 236 0xec 11101100
    э 237 0xed 11101101
    ю 238 0xee 11101110
    я 239 0xef 11101111
    Ё 240 0xf0 11110000
    ё 241 0xf1 11110001
    Є 242 0xf2 11110010
    є 243 0xf3 11110011
    Ї 244 0xf4 11110100
    ї 245 0xf5 11110101
    Ў 246 0xf6 11110110
    ў 247 0xf7 11110111
    ° 248 0xf8 11111000
    ∙ 249 0xf9 11111001
    · 250 0xfa 11111010
    √ 251 0xfb 11111011
    № 252 0xfc 11111100
    ¤ 253 0xfd 11111101
    ■ 254 0xfe 11111110
    * 255 0xff 11111111
    
     
  6. rudi

    rudi Active Member

    Joined:
    3 Jun 2010
    Messages:
    492
    Likes Received:
    186
    Reputations:
    5
    вот так заработало
    PHP:
    #include "stdafx.h"
    #include <locale.h>
    #include <windows.h>

    int main(int argccharargv[])
    {  
        
    setlocale(LC_ALL,"Russian");
        
    char Str[]="ВГВГИИИИИ";
        
    CharLower(Str);

        return 
    0;
    }