m
This commit is contained in:
+96
-79
@@ -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;
|
||||||
|
|||||||
@@ -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
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user