diff --git a/proglabs/lab10/func.c b/proglabs/lab10/func.c index 1a4f9ba..782b168 100644 --- a/proglabs/lab10/func.c +++ b/proglabs/lab10/func.c @@ -7,7 +7,7 @@ int queryinput(int *x, int *inquery, int *query){ //INPUT------------------------------------------------- wint_t ch; *inquery = 0; - while((ch=getwchar())!='\n'&&ch!='\t'&&ch!=' '&&*inquery='0'&&query[i]<='9'){ - x[30]=(x[30]*100)+(query[i]-'0'); + if(query[i]>=L'0'&&query[i]<=L'9'){ + x[30]=(x[30]*100)+(query[i]-L'0'); } } x[31]+=x[30]; @@ -125,12 +123,12 @@ void func1 (char **f, int *x,int inquery, int *query){ { if(x[32]); else{ - if(query[inquery-1]=='\n'){ - if(query[inquery-2]=='!'||query[inquery-2]=='?'||query[inquery-2]=='.'||query[inquery-2]==',') - query[inquery-2]='!'; - else {query[inquery-1]='!';query[inquery]='\n';} - x['!'-28]++;inquery++;} - put(0,x,inquery,query); + if(query[inquery-1]==L'\n'){ + if(query[inquery-2]==L'!'||query[inquery-2]==L'?'||query[inquery-2]==L'.'||query[inquery-2]==L',') + query[inquery-2]=L'!'; + else {query[inquery-1]=L'!';query[inquery]=L'\n';} + x[L'!'-28]++;inquery++;} + put(x,0,inquery,query); } break; } @@ -139,12 +137,12 @@ void func1 (char **f, int *x,int inquery, int *query){ { if(x[32]); else{ - if(query[inquery-1]=='\n'){ - if(query[inquery-2]=='!'||query[inquery-2]=='?'||query[inquery-2]=='.'||query[inquery-2]==',') - query[inquery-2]='.'; - else {query[inquery-1]='.';query[inquery]='\n';} - x['!'-28]++;inquery++;} - put(0,x,inquery,query); + if(query[inquery-1]==L'\n'){ + if(query[inquery-2]==L'!'||query[inquery-2]==L'?'||query[inquery-2]==L'.'||query[inquery-2]==L',') + query[inquery-2]=L'.'; + else {query[inquery-1]=L'.';query[inquery]=L'\n';} + x[L'!'-28]++;inquery++;} + put(x,0,inquery,query); } break; } @@ -177,8 +175,7 @@ void func1 (char **f, int *x,int inquery, int *query){ } } - - printf("\nFunc output:"); +void func2 (char **f, int *x,int inquery, int *query,int *ch){ switch(funcReturn(f[2])){ case 1: //Подсчитывает, сколько слов начинается с последней буквы первого слова. { @@ -194,46 +191,101 @@ void func1 (char **f, int *x,int inquery, int *query){ if(x[32])printf("\n\t Слов имеющих указанную длинну - %d",x[30]); else{ if(last(inquery,query))inquery--; - if(strquery(f[3],query))x[30]++; - break;} + if(strquery(f[3],query))x[30]++; + } + break; } case 3: //Печатает самое длинное слово в тексте. { - int ch[20]; - if(x[32]){printf("\n\t")} + if(x[32]){printf("\n\t");} else{ - if(x[31]1){ + x[30]=x[2]; + x[31]=x[3]; + x[33]=x[4]; + put(x,0,inquery,query); + break; + } + } + } break; } case 7: //Вычисляет количество слов между первой и последней запятой во введенном тексте { + if(x[32]){printf("\n\tКолличество слов между первой и последней запятой - %d",x[34]);} + else{ + if(x[L','-28]>0){ + x[31]+=inquery; + if(x[L','-28]>x[33]){ + x[34]+=x[31]; + x[33]=x[31]; + x[31]=0; + } + } + } break; } case 8: //Находит два соседних слова, начинающихся с большой буквы { + if(x[28]); + else{ + if(*query>=L'А'&&*query<=L'Я'){ + x[35]++; + if(x[35]==2){ + x[30]=x[2]; + x[31]=x[3]; + x[33]=x[4]; + x[35]=0; + printf("\n\t"); + put(x,0,x[34],ch); + printf(" - "); + put(x,0,inquery,query); + printf(" | Находятся друг за другом"); + } + for(int i = 0;iтевирП { - put(inquery-1,x,0,query); + put(x,inquery-1,0,query); break; } case 2: //Делит слово на два и меняет начало с концом. Пример: жук -> кжу,солнце -> нцесол { + put(x,0,inquery/2,query); + put(x,inquery/2,inquery,query); break; } - case 3: //После каждой гласной буквы вставляется буква 'c' и гласная повторяется. Пример: кот ->косот. + case 3: //После каждой гласной буквы вставляется буква L'c' и гласная повторяется. Пример: кот ->косот. { + int alph[20] = {L'а',L'и',L'е',L'ё',L'о',L'у',L'ы',L'э',L'ю',L'я', + L'А',L'И',L'Е',L'Ё',L'О',L'У',L'Ы',L'Э',L'Ю',L'Я'}; + for(int i = 0;i121620, обработать только буквы. { + x[25]=-1; + for(int i = 0;i= L'а' && query[i] <= L'я'){ + x[25] = (query[i] - L'а') + 1; + if(query[i]>=alphabet[8])x[25]++;} + else if (query[i] == L'ё') + x[25] = 7; + else if (query[i] >= L'А' && query[i] <= L'Я'){ + x[25] = (query[i] - L'А') + 1; + if(query[i]>=alphabet[41])x[25]++;} + else if (query[i] == L'Ё') + x[25] = 7; + if(x[25]!=-1){printf("%d",x[25]);x[25]=-1;} + } + put(x,40,40,query); break; } case 5: //Заменяет буквы верхнего регистра на буквы нижнего и наоборот. Пример: Привет -> пРИВЕТ. { + for(int i = 0;i32){ + query[i]=alphabet[i-33]; + + } + } + } + put(x,0,inquery,query); break; } - case 6: //Заменяет буквы на их двоичное представление из таблицы ASCII.Пример: кот ->101010101010111011100010 + /*case 6: //Заменяет буквы на их двоичное представление из таблицы ASCII.Пример: кот ->101010101010111011100010 { break; - } + }*/ case 7: /*Заменяет букву на заданное смещение в пределах алфавита (шифр Цезаря), смещение задаётся параметром и может быть положительным или отрицательным. Пример: кот 3 -> нсх, кот -3 -> злп*/ { + while(f[3][x[35]]>=L'0'&&f[3][x[35]]<=L'9'){ + x[34] = (x[34]*10)+(f[3][x[35]]-L'0'); + x[35]++; + } + for(int i = 0;i33)x[34]-=33; + if(j+x[34]>=33)x[34]-=33; + query[i]=alphabet[j+x[34]]; + } + + else if(query[i]==alphabet[j]&&j>32){ + while(x[34]>33)x[34]-=33; + if(j+x[34]>=66)x[34]-=33; + query[i]=alphabet[j+33+x[34]]; + } + } + } + put(x,0,inquery,query); break; } case 8: //Делит слово на два и оставляет большую часть. Пример: жук -> к, солнце -> сол { + if(inquery%2!=0)x[34]=1; + else x[34]=0; + for (int i = 0; i<(inquery/2)+x[34];i++) + x[35] +=query[i]; + for (int i = (inquery/2)+x[34]; ix[36]) + put(x,0,(inquery/2)+x[34],query); + else + put(x,(inquery/2)+x[34],inquery,query); break; } case 9: //Делит слово на два и оставляет меньшую часть. Пример: жук -> жу, солнце -> нце { + if(inquery%2!=0)x[34]=1; + else x[34]=0; + for (int i = 0; i<(inquery/2)+x[34];i++) + x[35] +=query[i]; + for (int i = (inquery/2)+x[34]; ikot, жук -> zhuk - { + { + int translit[43]={ + L'a',L'b',L'v',L'g',L'd',L'e' , L'y',/**/L'o' , L'z',/**/L'h' , L'z',L'i',L'y',L'k',L'l',L'm',L'n',L'o', + L'p',L'r',L's',L't',L'u',L'f',L'h',L'c' , L'c',/**/L'h' , L's',/**/L'h' , L's',/**/L'h',/**/L'c',/**/L'h', + L'\'',L'y',L'\'',L'e',L'e' , L'y',/**/L'u' , L'y',/**/L'a'}; + + for(int i =0;i>inquery;i++){ + if( + (query[i] >= alphabet[0] && query[i] <= alphabet[5]) || + (query[i] >= alphabet[8] && query[i] <= alphabet[23]) || + (query[i] >= alphabet[27] && query[i] <= alphabet[30]) || + (query[i] >= alphabet[0+33] && query[i] <= alphabet[5+33]) || + (query[i] >= alphabet[8+33] && query[i] <= alphabet[23+33]) || + (query[i] >= alphabet[27+33] && query[i] <= alphabet[30+33])) + { + query[i]=translit[i]; + } + else if (query[i] != alphabet[26] || query[i] != alphabet[26+33]) + { + for(int z = 0;zinquery) for(;i>inquery;i--) - putwchar(query[i]); + printf("%lc",query[i]); - if(x[30]!=x[2]){putwchar('\n');} - if(x[31]!=x[3]){putwchar('\t');} - if(x[33]!=x[4]){putwchar(' ');} + if(x[30]!=x[2]){putwchar(L'\n');} + if(x[31]!=x[3]){putwchar(L'\t');} + if(x[33]!=x[4]){putwchar(L' ');} x[30]=x[2]; x[31]=x[3]; x[33]=x[4]; } -void count(int *x){ +void printcount(int *x){ int sum = 0; printf("\nStatistic"); printf("\n\t \"Symb\" - [ammount]\n"); @@ -349,7 +528,7 @@ void count(int *x){ int str(char *a, char *b) { int i = 0; - while(a[i] != '\0' && b[i] != '\0') { + while(a[i] != L'\0' && b[i] != L'\0') { if(a[i] != b[i]) return 0; i++; } diff --git a/proglabs/lab10/head.h b/proglabs/lab10/head.h index decedf8..93b0a82 100644 --- a/proglabs/lab10/head.h +++ b/proglabs/lab10/head.h @@ -13,15 +13,15 @@ int queryinput(int *x, int *inbuf, int *query); // FUNC void func1(char **f, int *x, int inquery, int *query); -void func2(char **f, int *x, int inquery, int *query); +void func2(char **f, int *x, int inquery, int *query, int *ch); void func3(char **f, int *x, int inquery, int *query); int last(int inquery,int *query); -void put(int i,int *x,int inquery,int *query); +void put(int *x,int i,int inquery,int *query); -void count(int *x); +void printcount(int *x); int str(char *a,char *b); @@ -32,6 +32,6 @@ int funcReturn(char *f); // DEFINE #define clear printf("\n \033[H\033[J \n") -#define QUERYMAX 20 +#define QUERYMAX 40 #define XMAX 40 #endif diff --git a/proglabs/lab10/main.c b/proglabs/lab10/main.c index 8812fd0..ee19380 100644 --- a/proglabs/lab10/main.c +++ b/proglabs/lab10/main.c @@ -4,9 +4,11 @@ int main(int argc, char *argv[]){ setlocale(LC_ALL, ""); int query[QUERYMAX]; + int assist[QUERYMAX]; int inquery; int x[XMAX]; for (int i = 0;i" - [-1474847549] - other - [991712084] -Statistic - "Symb" - [ammount] - - "" - [0] - "" - [0] - "\n" - [5] - "\t" - [0] - " " - [20] - "5" - [32764] - "9" - [32654] - ">" - [-1474847549] - other - [991712084] \ No newline at end of file + "space" - [12] + other - [11] \ No newline at end of file diff --git a/proglabs/lab10/test/test.md b/proglabs/lab10/test/test.md index 9cbe668..e46e42e 100644 --- a/proglabs/lab10/test/test.md +++ b/proglabs/lab10/test/test.md @@ -1,5 +1,2 @@ -asd asd asd dsa ggg qwe asdasdasd qweqweqw - - - a -a +Привет Пока как дела я тебя не знаю +а б в г д