Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Англиское слово ввели русскими буквами.


Автор: andrew_121 23.2.2009, 12:38
Дарова!
Мужики - С праздником!
...оставайтесь мужиками!

И так, к делу.

Допустим пользователь ввел английскую строку русскими буквами.
пщщпдуюкг - это google.ru Как такое сделать?


Автор: Lazin 23.2.2009, 12:49
простая замена, что тут сложного?
в простейшем случае(не юникод):
Код

char char_map[0x100];
char_map['ф'] = 'a';
...
char str = ...;
p = str;
while(p)
{
   *p = char_map[*p];
     p++;
}

сложнее определить что слово набрано в неверной раскладке, для этого видимо придется использовать статистические методы

Автор: rMaveric 23.2.2009, 12:56
Полностью согласен с 
Lazin, но больше проблем создает вопрос как определить ошибка это или пользователь знал, что он вводит.

Или задача подразумевает, что пользователю тезнически не нужны русские символы при вводе? Так тогда почему его не ограничить еще на этапе ввода?

Но если тебе нужно реализовать что-то наподобии яндексовских "Быть может, вы искали: ", то тебе еще потребуется сравнивать со множеством возможных вариантов.

Автор: Soah 23.2.2009, 14:03
Как-нибудь так
Код

char rus[] = "абркд";
char en[] = "abrcd";

char strRus[] = "Hello абракадабра URA";
char* pStrRus = strRus;
char strEn[30] = "";

char* ptr;
char temp[2];
char ch;

while (*pStrRus) {
    ch = pStrRus[0];

    if(ptr = strchr(rus, ch)) {
        temp[0] = en[ptr-rus];
        temp[1] = '\0';
        strcat(strEn, temp);
    }
    else 
        strncat(strEn, pStrRus, 1);

    ++pStrRus;
}

printf("%s", strEn);

Автор: cutwater 23.2.2009, 19:47
Цитата(rMaveric @  23.2.2009,  11:56 Найти цитируемый пост)
Полностью согласен с 
Lazin, но больше проблем создает вопрос как определить ошибка это или пользователь знал, что он вводит.


В русском или английском языках так же встречаются редкие или невозможные сочетания символов. На этом принципе так же строится статистический анализ.
На этот счет можно найти сорцы какого нибудь открытого аналога PuntoSwitcher и посмотреть.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)