Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Определение языка текста 
:(
    Опции темы
Toohtik
Дата 30.11.2006, 00:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 142
Регистрация: 30.1.2006
Где: Харьков

Репутация: нет
Всего: нет



Здраствуйте. Возникла задача в которой надо определить язык текста. Эту задачу я пытаюсь решить путем сравнения символов ASCII:
Код

bool Lang(char* readfile)
{
    int rus=0,en=0;
    int i=0;
    int k;
    k=strlen(readfile);
    for(i=0;i<k;i++)
    {        
        if((readfile[i]>127)&&(readfile[i]<176))
            rus++;

        if((readfile[i]>64)&&(readfile[i]<123))
            en++;
    }
    if(en>rus)
        return true;
    else
        return false;
}
 
Но в результате у меня считаются только английские символы. В чем может заключатся ошибка? Ести ли какие нибудь другие пути решения этой задачи? Можно даже функциями WinApi.
PM ICQ   Вверх
Sartorius
Дата 30.11.2006, 01:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1568
Регистрация: 18.7.2006
Где: Ivory tower

Репутация: 8
Всего: 37



 Не в юникоде строчка то?
PM MAIL ICQ   Вверх
Toohtik
Дата 30.11.2006, 01:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 142
Регистрация: 30.1.2006
Где: Харьков

Репутация: нет
Всего: нет



Честно говоря даже и не знаю. Сама программа написана на Api, она читает в readfile текстовый файл. А как определить Юникод или не Юникод?
PM ICQ   Вверх
satrap
Дата 30.11.2006, 02:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 29.11.2006

Репутация: нет
Всего: 1



msdn - data type ranges
Цитата

char,
signed char  –128 to 127


PM MAIL   Вверх
codelord
Дата 30.11.2006, 02:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 777
Регистрация: 7.5.2005
Где: ты моя темноглаза я где?!

Репутация: 1
Всего: 39



Цитата(Toohtik @  29.11.2006,  21:09 Найти цитируемый пост)
 А как определить Юникод или не Юникод?

Открой Hex редактором если начало файла такое:
FFFE или EFBB то юникод
если нет то видимо нет.

ну или посчитай сколько символов если текст не большой (или посмотри с помощью текстового редактора),
юникод символ занимает 2 байта, т.е.
если например 20 символов то файл юникод будет весить 40 байт,
а обычный текст 20 байт.

ну или еще открой блокнотом и выбери сохранить как и сохрани как тебе нужно там можно выбрать.


--------------------
Доступен поиск по исходным кодам в GOOGLE.
http://www.google.com/codesearch
PM MAIL   Вверх
peetonn
Дата 30.11.2006, 02:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 25.11.2006

Репутация: нет
Всего: нет



заметь:
у символа 'А' (русского) код 128
однако это неверно: 
если  
char a = 'А';
то
a == (char) 128; // вовсе не так!!!

PM MAIL   Вверх
Toohtik
Дата 30.11.2006, 20:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 142
Регистрация: 30.1.2006
Где: Харьков

Репутация: нет
Всего: нет



Что значит начало? Открыл при помощи winhex в граффе offset - 00000 00000001.... т.е. FFFE или EFBB и не пахнет, а сама информация такого типа:E2 F2 EF... 
По размеру 16 букв - 18 байт
PM ICQ   Вверх
JackYF
Дата 30.11.2006, 21:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



В любом случае попробуй так:

bool Lang(char* readfile)
{
    int rus=0,en=0;
    int i=0;
    int k;
    k=strlen(readfile);
    for(i=0;i<k;++i)
    {        
        if((readfile[i]>'А')&&(readfile[i]<'я'))
            rus++;

        else if((readfile[i]>'A')&&(readfile[i]<'z'))
            en++;
    }
    if(en>rus)
        return true;
    else
        return false;
}


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
Toohtik
Дата 30.11.2006, 21:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Awaiting Authorisation
Сообщений: 142
Регистрация: 30.1.2006
Где: Харьков

Репутация: нет
Всего: нет



JackYF,  спасибо помогло!!!
PM ICQ   Вверх
Rockie
Дата 2.12.2006, 01:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 23.4.2006

Репутация: 8
Всего: 31



JackYF, символы в таблице ASCII не обязательно располагаются подряд (как в алфавите) и не идут цельным куском(в интервале от 'A' до 'z' еще попадают '\',  '[', ']' и тд)



--------------------
Чтобы иметь большой гардероб - надо иметь большой гардероб.
PM   Вверх
JackYF
Дата 4.12.2006, 16:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



Rockie, не спорю.
Мое решение далеко не оптимальное. Оно есть второе, что приходит в голову...

В принципе, если мы проверяем текст, то частота встречаемости \ , [ , ] на порядок меньше частоты встречаемости английских и русских букв.
Если текст написан целиком на русском или английском языках, то ошибки, думаю, не будет. 


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0530 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.