UTF-8 кириллица и латиница
Добавлено: 01 дек 2013, 20:26
Задание найти среднюю длинну слова(словом называется любая последовательность русских и латинских букв) в кодировке 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;
}