This commit is contained in:
2025-11-26 01:38:59 +07:00
parent deb82891bb
commit da1f8a0db7
3 changed files with 119 additions and 102 deletions
+96 -79
View File
@@ -1,14 +1,15 @@
#include "head.h" #include "head.h"
int buffinput(int *x, int *inbuff, int *buff){
int queryinput(int *x, int *inquery, int *query){
setlocale(LC_ALL, ""); setlocale(LC_ALL, "");
//INPUT------------------------------------------------- //INPUT-------------------------------------------------
wint_t ch; wint_t ch;
*inbuff = 0; *inquery = 0;
while((ch=getwchar())!='\n'&&ch!='\t'&&ch!=' '&&*inbuff<BUFFMAX){ while((ch=getwchar())!='\n'&&ch!='\t'&&ch!=' '&&*inquery<QUERYMAX){
*(buff+*inbuff)=(int)ch; *(query+*inquery)=(int)ch;
(*inbuff)++; (*inquery)++;
} }
//______________________________________________________ //______________________________________________________
@@ -21,9 +22,9 @@ int buffinput(int *x, int *inbuff, int *buff){
else if(ch=='\t')x[3]++; else if(ch=='\t')x[3]++;
else if(ch==' ')x[4]++; else if(ch==' ')x[4]++;
while (c < *inbuff) while (c < *inquery)
{ {
int sym = buff[c]; int sym = query[c];
if ((sym >= L'а' && sym <= L'я') || if ((sym >= L'а' && sym <= L'я') ||
(sym >= L'А' && sym <= L'Я')) (sym >= L'А' && sym <= L'Я'))
{ {
@@ -47,7 +48,7 @@ int buffinput(int *x, int *inbuff, int *buff){
c++; c++;
continue; continue;
} }
x[27]++; x[33]++;
c++; c++;
} }
//________________________________________________________ //________________________________________________________
@@ -57,144 +58,153 @@ int buffinput(int *x, int *inbuff, int *buff){
} }
void func1 (char **f, int *x,int inbuff, int *buff){ void func1 (char **f, int *x,int inquery, int *query){
switch(funcReturn(f[2])){ switch(funcReturn(f[2])){
case 1://Определяет среднюю длину слова в тексте case 1://Определяет среднюю длину слова в тексте
{ {
if(x[28]){ if(x[32]){
x[30]/=x[29]; x[30]/=x[31];
printf("\n\tСредняя длинна слова - %d",x[30]); printf("\n\tСредняя длинна слова - %d",x[30]);
count(x); count(x);
} }
else{ else{
x[30]+=inbuff; x[30]+=inquery;
x[29]++; x[31]++;
} }
break; break;
} }
case 2://Подсчитывает количество слов, длина которых не превышает 5 символов. case 2://Подсчитывает количество слов, длина которых не превышает 5 символов.
{ {
if(x[28]){ if(x[32]){
printf("\n\tВсего слов <5 букв - %d",x[30]); printf("\n\tВсего слов <5 букв - %d",x[30]);
} }
else if(inbuff<5)x[30]++; else if(inquery<5)x[30]++;
break; break;
} }
case 3://Определяет количество букв после первого и до последнего слова. case 3://Определяет количество букв после первого и до последнего слова.
{ {
if(x[29]); if(x[31]);
else {x[30]-=x[0];x[29]=1;} else {x[30]-=x[0];x[31]=1;}
if(x[28]){x[30]+=x[0];printf("\n\tКолл-во букв после 1 и до последнего слова - %d",x[30]);} if(x[32]){x[30]+=x[0];printf("\n\tКолл-во букв после 1 и до последнего слова - %d",x[30]);}
break; break;
} }
case 4://Удаляет первую букву каждого слова и выводит результат. case 4://Удаляет первую букву каждого слова и выводит результат.
{ {
if(x[28]); if(x[32]);
else else
put(1,x,inbuff,buff); put(1,x,inquery,query);
break; break;
} }
case 5://определяет, сколько в заданном тексте слов, начинающихся с буквы,заданной пользователем. case 5://определяет, сколько в заданном тексте слов, начинающихся с буквы,заданной пользователем.
{ {
if(x[28]) if(x[32])
printf("\n\t Слов начинающихся на %c - %d",f[4][0],x[30]); printf("\n\t Слов начинающихся на %c - %d",f[4][0],x[30]);
else else
if(buff[0]==f[3][0])x[30]++; if(query[0]==f[3][0])x[30]++;
break; break;
} }
case 6://находит сумму всех цифр в введенном предложении. (если в тексте нетцифр, добавить) предусмотреть обработку шаблонов (12word, wo12rd,word12) case 6://находит сумму всех цифр в введенном предложении. (если в тексте нетцифр, добавить) предусмотреть обработку шаблонов (12word, wo12rd,word12)
{ {
if(x[28]) if(x[32])
printf("\n\t Найти сумму всех цифр - %d",x[29]); printf("\n\t Найти сумму всех цифр - %d",x[31]);
else else
for(int i=0;i<inbuff;i++){ for(int i=0;i<inquery;i++){
if(buff[i]>='0'&&buff[i]<='9'){ if(query[i]>='0'&&query[i]<='9'){
x[30]=(x[30]*100)+(buff[i]-'0'); x[30]=(x[30]*100)+(query[i]-'0');
} }
} }
x[29]+=x[30]; x[31]+=x[30];
x[30]=0; x[30]=0;
break; break;
} }
case 7:// вставляет восклицательный знак в конце каждой строки текста. case 7:// вставляет восклицательный знак в конце каждой строки текста.
{ {
if(x[28]); if(x[32]);
else{ else{
if(buff[inbuff-1]=='\n'){ if(query[inquery-1]=='\n'){
if(buff[inbuff-2]=='!'||buff[inbuff-2]=='?'||buff[inbuff-2]=='.'||buff[inbuff-2]==',') if(query[inquery-2]=='!'||query[inquery-2]=='?'||query[inquery-2]=='.'||query[inquery-2]==',')
buff[inbuff-2]='!'; query[inquery-2]='!';
else {buff[inbuff-1]='!';buff[inbuff]='\n';} else {query[inquery-1]='!';query[inquery]='\n';}
x['!'-28]++;inbuff++;} x['!'-28]++;inquery++;}
put(0,x,inbuff,buff); put(0,x,inquery,query);
} }
break; break;
} }
case 8://проверяет заканчивается ли каждая строка точкой и добавляет ее при необходимости, считает сколько точек было добавлено case 8://проверяет заканчивается ли каждая строка точкой и добавляет ее при необходимости, считает сколько точек было добавлено
{ {
if(x[28]); if(x[32]);
else{ else{
if(buff[inbuff-1]=='\n'){ if(query[inquery-1]=='\n'){
if(buff[inbuff-2]=='!'||buff[inbuff-2]=='?'||buff[inbuff-2]=='.'||buff[inbuff-2]==',') if(query[inquery-2]=='!'||query[inquery-2]=='?'||query[inquery-2]=='.'||query[inquery-2]==',')
buff[inbuff-2]='.'; query[inquery-2]='.';
else {buff[inbuff-1]='.';buff[inbuff]='\n';} else {query[inquery-1]='.';query[inquery]='\n';}
x['!'-28]++;inbuff++;} x['!'-28]++;inquery++;}
put(0,x,inbuff,buff); put(0,x,inquery,query);
} }
break; break;
} }
case 9://определяет сколько раз в введенной строке встречается слово,заданное пользователем. case 9://определяет сколько раз в введенной строке встречается слово,заданное пользователем.
{ {
if(x[28]) if(x[32])
printf("\n\t Слово %s встречается - %d раз",f[4],x[30]); printf("\n\t Слово %s встречается - %d раз",f[4],x[30]);
else{ else{
if(last(inbuff,buff))inbuff--; if(last(inquery,query))inquery--;
x[30]+=strbuff(f[3],buff);} x[30]+=strquery(f[3],query);}
break; break;
} }
case 10://подсчитывает количество букв в каждом втором слове. case 10://подсчитывает количество букв в каждом втором слове.
{ {
/* x[26] = x[0] - x[27]; x[34] = x[0] - x[33];
if(x[28]){ if(x[32]){
x[29]=x[27]-x[29]; x[31]=x[33]-x[31];
printf("\n\t Сумма букв в четных словах - %d",x[29]); printf("\n\t Сумма букв в четных словах - %d",x[31]);
} }
else{ else{
if(x[30]%2==0) if(x[30]%2==0)
x[29]+=x[26]; x[31]+=x[34];
x[27]+=x[27]; x[33]+=x[33];
x[30]++; x[30]++;
*/ } }
break; break;
} }
} }
} }
void func2 (char **f, int *x,int inbuff, int *buff){
printf("\nFunc output:"); printf("\nFunc output:");
switch(funcReturn(f[2])){ switch(funcReturn(f[2])){
case 1: //Подсчитывает, сколько слов начинается с последней буквы первого слова. case 1: //Подсчитывает, сколько слов начинается с последней буквы первого слова.
{ {
put(inbuff-1,x,-1,buff); if(x[32]){
printf("\n\t Количество букв начинающихся с %c - %d",x[32],x[34]);
}
else if(!(x[31])){x[31]=0;x[33]=query[inquery-1];}
else{if (query[0]==x[33]){x[34]++;}}
break; break;
} }
case 2: //Подсчитывает, сколько слов имеют указанную пользователем длину. case 2: //Подсчитывает, сколько слов имеют указанную пользователем длину.
{ {
if(x[28])printf("\n\t Слов имеющих указанную длинну - %d",x[30]); if(x[32])printf("\n\t Слов имеющих указанную длинну - %d",x[30]);
else{ else{
if(last(inbuff,buff))inbuff--; if(last(inquery,query))inquery--;
if(strbuff(f[3],buff))x[30]++; if(strquery(f[3],query))x[30]++;
break;} break;}
} }
case 3: //Печатает самое длинное слово в тексте. case 3: //Печатает самое длинное слово в тексте.
{ {
int ch[20];
if(x[32]){printf("\n\t")}
else{
if(x[31]<include)
x[31]=inquery;
}
break; break;
} }
case 4: //Подсчитывает количество знаков препинания (не букв и не цифр). case 4: //Подсчитывает количество знаков препинания (не букв и не цифр).
@@ -229,11 +239,11 @@ void func2 (char **f, int *x,int inbuff, int *buff){
} }
void func3 (char **f, int *x,int inbuff, int *buff){ void func3 (char **f, int *x,int inquery, int *query){
switch(funcReturn(f[2])){ switch(funcReturn(f[2])){
case 1: //Реверсирует слово. Пример: Привет ->тевирП case 1: //Реверсирует слово. Пример: Привет ->тевирП
{ {
put(inbuff-1,x,0,buff); put(inquery-1,x,0,query);
break; break;
} }
case 2: //Делит слово на два и меняет начало с концом. Пример: жук -> кжу,солнце -> нцесол case 2: //Делит слово на два и меняет начало с концом. Пример: жук -> кжу,солнце -> нцесол
@@ -277,33 +287,37 @@ void func3 (char **f, int *x,int inbuff, int *buff){
} }
} }
int last(int inbuff,int *buff){
if((buff[inbuff-1]=='.') || int last(int inquery,int *query){
(buff[inbuff-1]==',') || if((query[inquery-1]=='.') ||
(buff[inbuff-1]=='!') || (query[inquery-1]==',') ||
(buff[inbuff-1]=='?')) { (query[inquery-1]=='!') ||
(query[inquery-1]=='?')) {
return 1; return 1;
} }
return 0; return 0;
} }
void put(int i,int *x,int inbuff,int *buff){
if(i<inbuff) void put(int i,int *x,int inquery,int *query){
for(;i<inbuff;i++)
putwchar(buff[i]);
if(i>inbuff) if(i<inquery)
for(;i>inbuff;i--) for(;i<inquery;i++)
putwchar(buff[i]); putwchar(query[i]);
if(i>inquery)
for(;i>inquery;i--)
putwchar(query[i]);
if(x[30]!=x[2]){putwchar('\n');} if(x[30]!=x[2]){putwchar('\n');}
if(x[29]!=x[3]){putwchar('\t');} if(x[31]!=x[3]){putwchar('\t');}
if(x[27]!=x[4]){putwchar(' ');} if(x[33]!=x[4]){putwchar(' ');}
x[30]=x[2]; x[30]=x[2];
x[29]=x[3]; x[31]=x[3];
x[27]=x[4]; x[33]=x[4];
} }
void count(int *x){ void count(int *x){
int sum = 0; int sum = 0;
printf("\nStatistic"); printf("\nStatistic");
@@ -322,15 +336,16 @@ void count(int *x){
} }
for (int i = 58; i <= 64; i++) { for (int i = 58; i <= 64; i++) {
if(x[i-28]>10) if(x[i-38]>10)
printf("\n\t \"%c\" = [%d]", i, x[i-28]); printf("\n\t \"%c\" = [%d]", i, x[i-32]);
else else
sum+=x[i-38]; sum+=x[i-38];
} }
printf("\n\t other - [%d]",sum+x[27]); printf("\n\t other - [%d]",sum+x[33]);
} }
int str(char *a, char *b) { int str(char *a, char *b) {
int i = 0; int i = 0;
while(a[i] != '\0' && b[i] != '\0') { while(a[i] != '\0' && b[i] != '\0') {
@@ -340,11 +355,13 @@ int str(char *a, char *b) {
return a[i] == b[i]; return a[i] == b[i];
} }
int strbuff(char *a, int *b){
int strquery(char *a, int *b){
return 0; return 0;
} }
int funcReturn(char *f){ int funcReturn(char *f){
int swt=0; int swt=0;
if(str(f,"1"))swt=1; if(str(f,"1"))swt=1;
+9 -9
View File
@@ -7,31 +7,31 @@
// GET // GET
int buffinput(int *x, int *inbuf, int *buff); int queryinput(int *x, int *inbuf, int *query);
// FUNC // FUNC
void func1(char **f, int *x, int inbuff, int *buff); void func1(char **f, int *x, int inquery, int *query);
void func2(char **f, int *x, int inbuff, int *buff); void func2(char **f, int *x, int inquery, int *query);
void func3(char **f, int *x, int inbuff, int *buff); void func3(char **f, int *x, int inquery, int *query);
int last(int inbuff,int *buff); int last(int inquery,int *query);
void put(int i,int *x,int inbuff,int *buff); void put(int i,int *x,int inquery,int *query);
void count(int *x); void count(int *x);
int str(char *a,char *b); int str(char *a,char *b);
int strbuff(char *a,int *b); int strquery(char *a,int *b);
int funcReturn(char *f); int funcReturn(char *f);
// DEFINE // DEFINE
#define clear printf("\n \033[H\033[J \n") #define clear printf("\n \033[H\033[J \n")
#define BUFFMAX 20 #define QUERYMAX 20
#define XMAX 31 #define XMAX 40
#endif #endif
+14 -14
View File
@@ -3,8 +3,8 @@
int main(int argc, char *argv[]){ int main(int argc, char *argv[]){
setlocale(LC_ALL, ""); setlocale(LC_ALL, "");
int buff[BUFFMAX]; int query[QUERYMAX];
int inbuff; int inquery;
int x[XMAX]; int x[XMAX];
for (int i = 0;i<XMAX;i++)x[i]=0; for (int i = 0;i<XMAX;i++)x[i]=0;
@@ -32,22 +32,22 @@ int main(int argc, char *argv[]){
if(str(argv[1],"3"))swt=3; if(str(argv[1],"3"))swt=3;
switch(swt){ switch(swt){
case 1: case 1:
while(buffinput(x,&inbuff,buff)!=-1) while(queryinput(x,&inquery,query)!=-1)
func1(argv,x,inbuff,buff); func1(argv,x,inquery,query);
x[28]=1; x[32]=1;
func1(argv,x,inbuff,buff); func1(argv,x,inquery,query);
break; break;
case 2: case 2:
while(buffinput(x,&inbuff,buff)!=-1) while(queryinput(x,&inquery,query)!=-1)
func2(argv,x,inbuff,buff); func2(argv,x,inquery,query);
x[28]=1; x[32]=1;
func2(argv,x,inbuff,buff); func2(argv,x,inquery,query);
break; break;
case 3: case 3:
while(buffinput(x,&inbuff,buff)!=-1) while(queryinput(x,&inquery,query)!=-1)
func3(argv,x,inbuff,buff); func3(argv,x,inquery,query);
x[28]=1; x[32]=1;
func3(argv,x,inbuff,buff); func3(argv,x,inquery,query);
break; break;
} }