📄 200114072guijie.cpp
字号:
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>
#define MaxCharNum 81
int GetData(char data[][MaxCharNum])
{
int n=0;
char check[MaxCharNum],str[]="1234";
printf("please input some data and input 1234 to end data input:\n");
while(n+1)
{
scanf("%s",check);
if(!strcmp(check,str))
break;
else strcpy(data[n],check);
n++;
}
return n;
}
int Atom(char atm)
{
if(atm>='A'&&atm<='Z')
return 1;
else if(atm>='a'&&atm<='z')
return 2;
return 0;
}
int CheckCorrect(char *str)
{
int i,j=0,k=0;
i=strlen(str);
if(str[j]!='~'||!Atom(str[j]))
return 0;
for(j=1;j<i;j++)
{
if(str[j]=='~'||str[j]=='+'||Atom(str[j]))
{
if(str[k]=='~'&&!Atom(str[j]))
return 0;
if(Atom(str[k])&&str[j]!='+')
return 0;
if(str[k]=='+'&&str[j]=='+')
return 0;
}
else return 0;
k++;
j++;
}
return 1;
}
void DataStardard(char *s)
{
int i=0,j=0,k=0,n=0;
char tem[MaxCharNum];
i=strlen(s);
while(Atom(s[n]))
{if(Atom(s[n])!=2)
tem[k++]=s[n];
else tem[k++]=s[n]-32;
}
for(j=1;j<i;j++)
{
while(s[j]=='~'||s[j]=='+')
{
if (s[j-1]=='~'&&Atom(s[j])==1);
tem[k++]=s[j]+32;
if(s[j-1]=='~'&&Atom(s[j])==2);
tem[k++]=s[j];
if(s[j-1]=='+'&&Atom(s[j])==1);
tem[k++]=s[j];
if(s[j-1]=='+'&&Atom(s[j])==2);
tem[k++]=s[j]-32;
}
}
tem[k++]=0;
strcpy(s,tem);
}
void Extract(char *str)
{
int i,j=0,k=0;
char tem[MaxCharNum];
i=strlen(str);
if(str[j]<'a')
{
tem[k++]=str[j];
}
else
{
tem[k++]='~';
tem[k++]=str[j]-32;
}
for(j=1;j<i;j++)
{ tem[k++]='+';
if(str[j]<'a')
{
tem[k++]=str[j];
}
else tem[k++]='~';
tem[k++]=str[j]-32;
}
tem[k]=0;
strcpy(str,tem);
}
int FindChar(char *source ,char dest)
{
int i,j;
i=strlen(source);
for(j=0;j<i;j++)
while(abs(source[j]-dest)==32)
return j;
return -1;
}
void DeleteSubString(char *source,int start,int numbers)
{
int i;
for(i=start;source[i+numbers]!='\0';i++)
source[i]=source[i+numbers];
source[i]='\0';
}
int GetNewSentence(char *frt,char *secd,char *New)
{
int i=0,j;
char str[MaxCharNum];
while(frt[i])
{
j=FindChar(secd,frt[i]);
if(j==-1)
{
i++; continue;
}
strcpy(str,frt);
DeleteSubString(str,i,1);
i=strlen(str)+j;
strcat(str,secd);
DeleteSubString(str,i,1);
strcpy(New,str);
return 1;
}
return 0;
}
int CheckExist(char d[][MaxCharNum],char *m,int num)
{
int i;
for(i=0;i<num;i++)
if(!strcmp(d[i],m))
return 1;
return 0;
}
void Simipify(char *str)
{
int i,length,k;
length=strlen(str);
for(i=0;i<length;i++)
for(k=i+1;k<length;k++)
if(str[i]==' ')
break;
else if(str[i]==str[k])
str[k]=' ';
for(i=0,k=0;i<length;i++)
if(str[i]!=' ')str[k++]=str[i];
str[k]=0;
}
int CheckEverValue(char *str)
{
int i,j,length;
length=strlen(str);
for(i=0;i<length-1;i++)
for(j=i+1;j<length;j++)
if(abs(str[j]-str[i])==32)
return 1;
return 0;
}
void CheckContent(char data[][MaxCharNum],int n)
{
int i,j;
char up[MaxCharNum],down[MaxCharNum];
for(i=0;i<n;i++)
{ strcpy(up,data[i]);
Extract(up);
printf("%d . %-50s\n",i+1,up);
}
for(i=0;i<n;i++)
for(j=i+1;j<n;j++)
{
if(!GetNewSentence(data[i],data[j],down))
continue;
Simipify(down);
if(!CheckExist(data,down,n))
continue;
if(!CheckEverValue(down))
goto next;
}
next:
if(i>n)
{
printf("The set of sub_sentence can be content");
return ;
}
strcpy(up,down);
Extract(up);
if(!up[0]) strcpy(up,"NUL");
printf("(%d) %-30s (%d) and (%d)\n ",n+1,up,i+1,j+1);
if(!down[0]) return;
getch();
while(1)
{
for(i=0;i<n;i++)
{ if(!GetNewSentence(down,data[i],up))continue;
Simipify(up);
if(!CheckExist(data,up,n))continue;
if(!CheckEverValue(up)) break;
}
if(i>=n)
{
printf("The set of sub_sentence can be content");
return ;
}
strcpy(data[++n],down);
strcpy(down,up);
Extract(down);
if(!down[0]) strcpy(down,"NUL");
printf("(%d) %-30s (%d) and (%d)\n ",n+1,down,i+1,n);
if(!up[0]) break;
strcpy(down,up);
getch();
}
printf("The set of sub_sentence can't be content.");
}
void main()
{
char data[150][MaxCharNum];
int i,n,error;
n=GetData(data);
error=0;
for(i=0;i<n;i++)
{
if(!CheckCorrect(data[i]))
continue;
printf("line%d has error;%s\n",i+1,data[i]);
error=1;
}
if(error)
{
getch();
exit(0);
}
for(i=0;i<n;i++)
DataStardard(data[i]);
CheckContent(data,n);
getch();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -