Страница 1 из 1

UTF-8 кириллица и латиница

Добавлено: 01 дек 2013, 20:26
Сергей4
Задание найти среднюю длинну слова(словом называется любая последовательность русских и латинских букв) в кодировке utf-8.Для меня самое сложное написать функцию которая определяет кириллицу. Использовать можно библиотеку stdio.h, ввод с помощью getchar(),битовые операции,циклы,условия,ну и арифметика простая. помогите написать правильно. Вот то что у меня получилось.Но почему-то программа не завершается.

Код: Выделить всё

#include <stdio.h>

int is_delim (unsigned char c) {
 return ((c==';')||(c==':')||(c=='!')||(c=='?')||(c=='#')||(c=='/')||(c=='\n')||(c=='\t')||(c=='^')||(c=='%')||(c=='&')||(c=='*')||(c=='(')||(c==')')||(c=='=')||(c=='+')||(c=='-')||(c=='_')||(c=='<')||(c=='>')||(c==',')||(c=='.')||(c=='~')||(c=='$')||(c=='@'));
}

int is_lat (unsigned char c) {
 return (((c>='a')&&(c<='z'))||((c>='A')&&(c<='Z')));
}

int is_kir (unsigned char c) {
 int c2=c;
 c2=(c2«8)|getchar();
 return (((c2>='а')&&(c2<='я'))||((c2>='А')&&(c2<='Я')));
}

int is_letter (unsigned char c) {
 return (c>127) ? is_kir(c):is_lat(c);
}

int main() {
 typedef enum {END_OF_FILE,DELIM,WORD} STATE;
 STATE s;
 int l=0,n=0;
 unsigned char c=getchar();
 if (is_letter(c)) {
 s=WORD;
 n=1;
 l=1;
 }
 else s=DELIM;
 while (c!=EOF) {
 while (s==DELIM) {
 c=getchar();
 if (is_letter(c)) {
 n++;
 l++;
 s=WORD;
 }
 if (c==EOF) s=END_OF_FILE;
 }
 while (s==WORD) {
 if (is_letter(c)) l++;
 else if (c==EOF) s=END_OF_FILE;
 else s=DELIM;
 }
 }
 printf("\n");
 if (n!=0) {
 double k=l/n;
 printf("%f\n",k);
 }
 else printf("There was no words");
 return 0;
}