#include "head.h" int buffinput(int *x, int *inbuff, int *buff){ setlocale(LC_ALL, ""); //INPUT------------------------------------------------- wint_t ch; *inbuff = 0; while((ch=getwchar())!='\n'&&ch!='\t'&&ch!=' '&&*inbuff= 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++; } //________________________________________________________ return 0; } 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]++; } break; } case 2://Подсчитывает количество слов, длина которых не превышает 5 символов. { if(x[28]){ printf("\n\tВсего слов <5 букв - %d",x[30]); } else if(inbuff<5)x[30]++; break; } case 3://Определяет количество букв после первого и до последнего слова. { 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]);} break; } case 4://Удаляет первую букву каждого слова и выводит результат. { if(x[28]); else put(1,x,inbuff,buff); break; } case 5://определяет, сколько в заданном тексте слов, начинающихся с буквы,заданной пользователем. { if(x[28]) printf("\n\t Слов начинающихся на %c - %d",f[4][0],x[30]); else if(buff[0]==f[3][0])x[30]++; break; } case 6://находит сумму всех цифр в введенном предложении. (если в тексте нетцифр, добавить) предусмотреть обработку шаблонов (12word, wo12rd,word12) { if(x[28]) printf("\n\t Найти сумму всех цифр - %d",x[29]); else for(int i=0;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 (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: //Подсчитывает, сколько слов имеют указанную пользователем длину. { 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: //Печатает самое длинное слово в тексте. { break; } case 4: //Подсчитывает количество знаков препинания (не букв и не цифр). { break; } case 5: //Сортирует текст в порядке возрастания { break; } case 6: // Находит слова с тире во введенном тексте. { break; } case 7: //Вычисляет количество слов между первой и последней запятой во введенном тексте { break; } case 8: //Находит два соседних слова, начинающихся с большой буквы { break; } case 9: //Сортирует строку в тексте по убыванию { break; } case 10://Заменяет в каждом слове повторяющиеся буквы на '–' { break; } } } 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: //Делит слово на два и меняет начало с концом. Пример: жук -> кжу,солнце -> нцесол { break; } case 3: //После каждой гласной буквы вставляется буква 'c' и гласная повторяется. Пример: кот ->косот. { break; } case 4: //Каждая буква в слове заменяется на ее позицию в алфавите. Пример: кот ->121620, обработать только буквы. { break; } case 5: //Заменяет буквы верхнего регистра на буквы нижнего и наоборот. Пример: Привет -> пРИВЕТ. { break; } case 6: //Заменяет буквы на их двоичное представление из таблицы ASCII.Пример: кот ->101010101010111011100010 { break; } case 7: /*Заменяет букву на заданное смещение в пределах алфавита (шифр Цезаря), смещение задаётся параметром и может быть положительным или отрицательным. Пример: кот 3 -> нсх, кот -3 -> злп*/ { break; } case 8: //Делит слово на два и оставляет большую часть. Пример: жук -> к, солнце -> сол { break; } case 9: //Делит слово на два и оставляет меньшую часть. Пример: жук -> жу, солнце -> нце { break; } case 10://Превращает русский текст в транслит русского текста. Пример кот ->kot, жук -> zhuk { break; } } } 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 \"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; }