This commit is contained in:
2025-11-25 09:03:13 +07:00
parent 900f59059e
commit deb82891bb
6 changed files with 252 additions and 68 deletions
+179 -46
View File
@@ -6,30 +6,49 @@ int buffinput(int *x, int *inbuff, int *buff){
//INPUT-------------------------------------------------
wint_t ch;
*inbuff = 0;
while((ch=getwchar())!='\n'&&ch!=' '&&*inbuff<BUFFMAX){
while((ch=getwchar())!='\n'&&ch!='\t'&&ch!=' '&&*inbuff<BUFFMAX){
*(buff+*inbuff)=(int)ch;
(*inbuff)++;
}
//______________________________________________________
if(ch == WEOF)return -1;
//COUNT -------------------------------------------------
int c=0;
if(ch=='\n')x[2]++;
else if(ch=='\t')x[3]++;
else if(ch==' ')x[4]++;
//COUNT -------------------------------------------------
int c=0;
// [0]-symb [1]-num [2]-\n [3]-\t [4]-' ' [5].. 33-64
for(int i = 33;i<=64;i++){
if(
('а'<=&&>='я') ||
('А'<=&&>='Я')
){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;
}
@@ -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<inbuff;i++){
putwchar(buff[i]);
}
if(x[2]!=x[30])putwhcar{'\n'};
if(x[3]!=x[29])putwhcar{'\t'};
if(x[4]!=x[27])putwhcar{' '};
x[30]=x[2];
x[29]=x[3];
x[27]=x[4];
if(x[28]);
else
put(1,x,inbuff,buff);
break;
}
case 5://определяет, сколько в заданном тексте слов, начинающихся с буквы,заданной пользователем.
{
if[x[28]]
printf("\n\t - %d",x[30]);
if(x[28])
printf("\n\t Слов начинающихся на %c - %d",f[4][0],x[30]);
else
if(buff[0]==f[4])x[30]++;
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<inbuff;i++){
if(buff[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(i<inbuff)
for(;i<inbuff;i++)
putwchar(buff[i]);
if(i>inbuff)
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;
}
+14 -8
View File
@@ -2,6 +2,7 @@
#define HEAD
#include <stdio.h>
#include <locale.h>
#include <wchar.h>
@@ -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
+26 -12
View File
@@ -1,17 +1,23 @@
#include "head.h"
int main(int argc, char *argv[]){
int buff[BUFFMAX];
int x[XMAX];
for (int i = 0;i<XMAX;i++)x[i]++;
setlocale(LC_ALL, "");
if (argc < 3) {
int buff[BUFFMAX];
int inbuff;
int x[XMAX];
for (int i = 0;i<XMAX;i++)x[i]=0;
if (
argc < 2/* ||(
str(argv[3],"-1")
)*/
) {
printf("Not enough arguments. (-help)\n");
return 1;
}
if(argv[2]=="-help"||argv[2]=="-h"){kk
if(str(argv[1],"-help")||str(argv[1],"-h")){
printf("\nHelpMenu");
printf("\n\tprog [arg1] [arg2] [arg3]");
printf("\n\t[arg1] - Block of func");
@@ -20,24 +26,32 @@ int main(int argc, char *argv[]){
return 0;
}
switch(argv[2]){
int swt=0;
if(str(argv[1],"1"))swt=1;
if(str(argv[1],"2"))swt=2;
if(str(argv[1],"3"))swt=3;
switch(swt){
case 1:
while(buffinput!=-1)
while(buffinput(x,&inbuff,buff)!=-1)
func1(argv,x,inbuff,buff);
x[28]=1;
func1(argv,x,inbuff,buff);
break;
case 2:
while(buffinput!=-1)
while(buffinput(x,&inbuff,buff)!=-1)
func2(argv,x,inbuff,buff);
x[28]=1;
func2(argv,x,inbuff,buff);
break;
case 3:
while(buffinput!=-1)
while(buffinput(x,&inbuff,buff)!=-1)
func3(argv,x,inbuff,buff);
x[28]=1;
func3(argv,x,inbuff,buff);
break;
}
count(x);}
count(x);
return 0;
}
BIN
View File
Binary file not shown.
+26
View File
@@ -0,0 +1,26 @@
Средняя длинна слова - 1
Statistic
"Symb" - [ammount]
"" - [0]
"" - [0]
"\n" - [5]
"\t" - [0]
" " - [20]
"5" - [32764]
"9" - [32654]
">" - [-1474847549]
other - [991712084]
Statistic
"Symb" - [ammount]
"" - [0]
"" - [0]
"\n" - [5]
"\t" - [0]
" " - [20]
"5" - [32764]
"9" - [32654]
">" - [-1474847549]
other - [991712084]
+5
View File
@@ -0,0 +1,5 @@
asd asd asd dsa ggg qwe asdasdasd qweqweqw
a
a