Форум программистов CodeGuru
14 Август 2018, 17:23:19 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.

Войти
Новости:
 
   Начало   Помощь Войти Регистрация  
Страниц: [1]   Вниз
  Печать  
Автор Тема: Что за проблемы с кодировкой? подскажите как исправить  (Прочитано 15981 раз)
0 Пользователей и 1 Гость смотрят эту тему.
factura
Новичок
*
Офлайн Офлайн

Сообщений: 1


Просмотр профиля
« : 14 Январь 2014, 20:53:36 »

Найти в тексте все слова (не содержащие пробелов последовательности символов), содержащие символы из более чем одного из четырёх алфавитов: русских букв, латинских букв, цифр, символов (математических символов и знаков пунктуации).

Вот что сделал



Код:
#include <conio.h>
#include <stdio.h>
#include <string.h>
void main()
{
printf("INPUT:\n");
char s[100];
scanf("%[^\n]s",s);
int count=0;
for(int i=0;i<strlen(s)-1;i++)
{
if(s[i]==' ' && ((s[i+1]>='A'&& s[i+1]<='Z' && s[i+1]>='А' && s[i+1]<='Я') || (s[i+1]>='a'&& s[i+1]<='z' && s[i+1]>=-128 && s[i+1]<=-17)) )
count++;
}
printf("RESULT-%d",count);
_getch();

}
Когда ввожу слова с русскими и латинскими буквами по отдельности всё Работает
Работает когда ввожу последовательность типа "SSSЯЯЯЯ"
Но, когда ввожу последовательность "ЯЯЯЯJJJJ" то слово игнорируется почему не могу понять
Записан
3V
Администратор
Ветеран
*****
Офлайн Офлайн

Сообщений: 1347



Просмотр профиля WWW
« Ответ #1 : 15 Январь 2014, 07:26:52 »

Ну начнем с того, что для представления русского текста есть несколько однобайтовых кодировок (KOI8-R, windows-1251, CP866). И в них некоторые кириллические символы имеют разные коды. Поэтому в общем случае нельзя определить, является ли символ "русской буквой".

Далее.
Код вашей программы тоже в какой-то кодировке представлен. Конкретно в этой кодировке представлены русские символы в коде. Результат сравнения может быть false, если будет введен нужный символ, но в другой кодировке.

Далее.
Результат
Код:
s[i+1]>='A' && s[i+1]<='Z' && s[i+1]>='А' && s[i+1]<='Я'
например, всегда будет false, поскольку A-Z и А-Я - разные диапазоны.
Думается, нужно делать что-то вроде:

Код:
(s[i+1]>='A' && s[i+1]<='Z') ||
(s[i+1]>='А' && s[i+1]<='Я') ||
...
что-то еще


Короче, нужно смотреть в какой кодировке вводятся символы с консоли и в какой кодировке код программы.

Также имеет смысл переписать все на юникод - использовать wchar_t и wscanf.
Записан

Страниц: [1]   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2015, Simple Machines Valid XHTML 1.0! Valid CSS!