diff --git a/proglabs/lab10/func.c b/proglabs/lab10/func.c index 8a1d521..ae2e6f0 100644 --- a/proglabs/lab10/func.c +++ b/proglabs/lab10/func.c @@ -6,30 +6,49 @@ int buffinput(int *x, int *inbuff, int *buff){ //INPUT------------------------------------------------- wint_t ch; *inbuff = 0; - while((ch=getwchar())!='\n'&&ch!=' '&&*inbuff='я') || - ('А'<=&&>='Я') - ){x[0]++;c++;continue;} - - else if('0'>=buff[c]&&buff[c]<='9'){x[1]++;continue;} - else if(buff[c]=='\t'){x[3]++} - else if(buff[c]==i){x[i-28]++;c++;continue;}; - - else {x[25]++;c++;} + while (c < *inbuff) + { + int sym = buff[c]; + if ((sym >= L'а' && sym <= L'я') || + (sym >= L'А' && sym <= L'Я')) + { + x[0]++; + c++; + continue; + } + if (sym >= L'0' && sym <= L'9') + { + x[1]++; + c++; + continue; + } + if (sym > 32 && sym <= 47) { + x[sym - 28]++; + c++; + continue; + } + if (sym > 58 && sym <= 64) { + x[sym - 38]++; + c++; + continue; + } + x[27]++; + c++; } //________________________________________________________ @@ -38,18 +57,18 @@ int buffinput(int *x, int *inbuff, int *buff){ } -void func1 (char *f, int *x,int inbuff, int *buff){ - printf("\nFunc output:"); - switch(f[3]){ +void func1 (char **f, int *x,int inbuff, int *buff){ + switch(funcReturn(f[2])){ case 1://Определяет среднюю длину слова в тексте { if(x[28]){ x[30]/=x[29]; printf("\n\tСредняя длинна слова - %d",x[30]); + count(x); } else{ x[30]+=inbuff; - x{29}++; + x[29]++; } break; } @@ -57,7 +76,7 @@ void func1 (char *f, int *x,int inbuff, int *buff){ case 2://Подсчитывает количество слов, длина которых не превышает 5 символов. { if(x[28]){ - printf("\n\tВсего слов <5 букв - %d",x[30]); + printf("\n\tВсего слов <5 букв - %d",x[30]); } else if(inbuff<5)x[30]++; break; @@ -67,69 +86,112 @@ void func1 (char *f, int *x,int inbuff, int *buff){ { if(x[29]); else {x[30]-=x[0];x[29]=1;} - if(x[28]){x[30]+=x[0];printf{"\n\tКолл-во букв после 1 и до последнего слова - %d",x[30]}} + if(x[28]){x[30]+=x[0];printf("\n\tКолл-во букв после 1 и до последнего слова - %d",x[30]);} break; } case 4://Удаляет первую букву каждого слова и выводит результат. - { - for(int i = 1;i='0'&&buff[i]<='9'){ + x[30]=(x[30]*100)+(buff[i]-'0'); + } + } + x[29]+=x[30]; + x[30]=0; break; } case 7:// вставляет восклицательный знак в конце каждой строки текста. { + if(x[28]); + else{ + if(buff[inbuff-1]=='\n'){ + if(buff[inbuff-2]=='!'||buff[inbuff-2]=='?'||buff[inbuff-2]=='.'||buff[inbuff-2]==',') + buff[inbuff-2]='!'; + else {buff[inbuff-1]='!';buff[inbuff]='\n';} + x['!'-28]++;inbuff++;} + put(0,x,inbuff,buff); + } break; } case 8://проверяет заканчивается ли каждая строка точкой и добавляет ее при необходимости, считает сколько точек было добавлено { + if(x[28]); + else{ + if(buff[inbuff-1]=='\n'){ + if(buff[inbuff-2]=='!'||buff[inbuff-2]=='?'||buff[inbuff-2]=='.'||buff[inbuff-2]==',') + buff[inbuff-2]='.'; + else {buff[inbuff-1]='.';buff[inbuff]='\n';} + x['!'-28]++;inbuff++;} + put(0,x,inbuff,buff); + } break; } case 9://определяет сколько раз в введенной строке встречается слово,заданное пользователем. { + if(x[28]) + printf("\n\t Слово %s встречается - %d раз",f[4],x[30]); + else{ + if(last(inbuff,buff))inbuff--; + x[30]+=strbuff(f[3],buff);} break; } case 10://подсчитывает количество букв в каждом втором слове. { + /* x[26] = x[0] - x[27]; + if(x[28]){ + x[29]=x[27]-x[29]; + printf("\n\t Сумма букв в четных словах - %d",x[29]); + } + else{ + if(x[30]%2==0) + x[29]+=x[26]; + x[27]+=x[27]; + x[30]++; +*/ } break; } } } -void func2 (int *f, int *x,int inbuff, int *buff){ - switch(f[3]){ +void func2 (char **f, int *x,int inbuff, int *buff){ + printf("\nFunc output:"); + switch(funcReturn(f[2])){ case 1: //Подсчитывает, сколько слов начинается с последней буквы первого слова. { + put(inbuff-1,x,-1,buff); break; } case 2: //Подсчитывает, сколько слов имеют указанную пользователем длину. { - break; + if(x[28])printf("\n\t Слов имеющих указанную длинну - %d",x[30]); + else{ + if(last(inbuff,buff))inbuff--; + if(strbuff(f[3],buff))x[30]++; + break;} } case 3: //Печатает самое длинное слово в тексте. { @@ -167,10 +229,11 @@ void func2 (int *f, int *x,int inbuff, int *buff){ } -void func3 (int *f, int *x,int inbuff, int *buff){ - switch(f[3]){ +void func3 (char **f, int *x,int inbuff, int *buff){ + switch(funcReturn(f[2])){ case 1: //Реверсирует слово. Пример: Привет ->тевирП { + put(inbuff-1,x,0,buff); break; } case 2: //Делит слово на два и меняет начало с концом. Пример: жук -> кжу,солнце -> нцесол @@ -214,15 +277,85 @@ void func3 (int *f, int *x,int inbuff, int *buff){ } } +int last(int inbuff,int *buff){ + if((buff[inbuff-1]=='.') || + (buff[inbuff-1]==',') || + (buff[inbuff-1]=='!') || + (buff[inbuff-1]=='?')) { + return 1; + } + return 0; +} + +void put(int i,int *x,int inbuff,int *buff){ + + if(iinbuff) + for(;i>inbuff;i--) + putwchar(buff[i]); + + if(x[30]!=x[2]){putwchar('\n');} + if(x[29]!=x[3]){putwchar('\t');} + if(x[27]!=x[4]){putwchar(' ');} + x[30]=x[2]; + x[29]=x[3]; + x[27]=x[4]; +} void count(int *x){ int sum = 0; printf("\nStatistic"); printf("\n\t \"Symb\" - [ammount]\n"); - printf("\n\t \"\\n\" - [%d]"); - printf("\n\t \"\\t\" - [%d]"); - printf("\n\t \" \" - [%d]"); - for(int i=33;i<=64;i++) - if(x[i-28]>10){printf("\n\t\"%ls\" - [%d]"),i,x[i];} - else sum+=x[i-30]; - printf("\n\t other - [%d]",sum); + printf("\n\t \"Letters\" - [%d]",x[0]); + printf("\n\t \"Digits\" - [%d]",x[1]); + printf("\n\t \"\\n\" - [%d]",x[2]); + printf("\n\t \"\\t\" - [%d]",x[3]); + printf("\n\t \"space\" - [%d]",x[4]); + + for (int i = 33; i <= 47; i++) { + if (x[i-28] > 10) + printf("\n\t \"%c\" - [%d]", i, x[i-28]); + else + sum+=x[i-28]; + } + + for (int i = 58; i <= 64; i++) { + if(x[i-28]>10) + printf("\n\t \"%c\" = [%d]", i, x[i-28]); + else + sum+=x[i-38]; + } + + printf("\n\t other - [%d]",sum+x[27]); +} + +int str(char *a, char *b) { + int i = 0; + while(a[i] != '\0' && b[i] != '\0') { + if(a[i] != b[i]) return 0; + i++; + } + return a[i] == b[i]; +} + +int strbuff(char *a, int *b){ + + return 0; +} + +int funcReturn(char *f){ + int swt=0; + if(str(f,"1"))swt=1; + if(str(f,"2"))swt=2; + if(str(f,"3"))swt=3; + if(str(f,"4"))swt=4; + if(str(f,"5"))swt=5; + if(str(f,"6"))swt=6; + if(str(f,"7"))swt=7; + if(str(f,"8"))swt=8; + if(str(f,"9"))swt=9; + if(str(f,"10"))swt=10; + return swt; } diff --git a/proglabs/lab10/head.h b/proglabs/lab10/head.h index 95a37e4..6d3e59c 100644 --- a/proglabs/lab10/head.h +++ b/proglabs/lab10/head.h @@ -2,6 +2,7 @@ #define HEAD #include +#include #include @@ -10,22 +11,27 @@ int buffinput(int *x, int *inbuf, int *buff); // FUNC -void func1(int f, int *x, int inbuff, int *buff); +void func1(char **f, int *x, int inbuff, int *buff); -void func2(int f, int *x, int inbuff, int *buff); +void func2(char **f, int *x, int inbuff, int *buff); -void func3(int f, int *x, int inbuff, int *buff); +void func3(char **f, int *x, int inbuff, int *buff); + +int last(int inbuff,int *buff); + +void put(int i,int *x,int inbuff,int *buff); void count(int *x); +int str(char *a,char *b); + +int strbuff(char *a,int *b); + +int funcReturn(char *f); // DEFINE -#define clear; printf("\n \033[H\033[J \n"); +#define clear printf("\n \033[H\033[J \n") #define BUFFMAX 20 #define XMAX 31 - -#define FUNC1 3 -#define FUNC2 8 -#define FUNC3 4 #endif diff --git a/proglabs/lab10/main.c b/proglabs/lab10/main.c index 2cad787..6ac68a6 100644 --- a/proglabs/lab10/main.c +++ b/proglabs/lab10/main.c @@ -1,17 +1,23 @@ #include "head.h" int main(int argc, char *argv[]){ - int buff[BUFFMAX]; - 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 diff --git a/proglabs/lab10/test/test.md b/proglabs/lab10/test/test.md new file mode 100644 index 0000000..9cbe668 --- /dev/null +++ b/proglabs/lab10/test/test.md @@ -0,0 +1,5 @@ +asd asd asd dsa ggg qwe asdasdasd qweqweqw + + + a +a