#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define max 1025
char *strca(char *a,char *ss)//把字符串ss连接到被操作的字符串之后
{
int i,j,k;
i=strlen(a);//测量原字符串和新加的字符串的长度
j=strlen(ss);
for(k=0;k<=j;k++)
{
a[i+k]=ss[k];//将ss加在a后面
}
return a;
}
int strequ(char *a,char *ss)//判断a与ss字符串是否相等
{
int i=0;
while(a[i]==ss[i]&&a[i]!='\0'&&ss[i]!='\0')//如果a,ss的第i个字符相等并且两者都不是结束符,i++
{
i++;
}
if(a[i]=='\0'&&ss[i]=='\0')
{
return 1;//如果恰好比较到两者都到了结束符,说明之前的字符全都相等,返回1
}
else return 0;
}
int main()
{
char a[max]={0};//初始化字符串
char ca[max]={0};
char ss[max]={0};
scanf("%s",a);//输入初始的字符串
int q,i,j,k;
scanf("%d",&q);//操作数q
for(i=1;i<=q;i++)
{
scanf("%s",ca);//输入操作
if(ca[3]=='c')//即输入了strcat
{
scanf("%s",ss);//输入要加的字符串,并打印
printf("%s\n",strca(a,ss));
}
else if(ca[3]=='s')//如果输入了strsub
{
int m,n;
scanf("%d%d",&m,&n);//输入要打印的子串的开头结尾
int la=strlen(a);
if(m<0||n>=la)//如果输入的不合法,输出fail
{
printf("fail\n");
}
else if(n<0||m+n>la)
{
printf("fail\n");
}
else
{
for(k=0;k<n;k++)//输入合法,打印出子串
{
printf("%c",a[k+m]);
}
printf("\n");
}
}
else if(ca[3]=='e')//如果输入的是strequ
{
scanf("%s",ss);
int fn=strequ(a,ss);//调用比较函数
if(fn==1)
{
printf("yes\n");//如果return==1标示相等 输出yes
}
else if(fn==0)
{
printf("no\n");
}
}
}
}
感悟:本题中判断两个字符串是否相等的函数中,要注意相等的条件是从开头一直到碰到结束符都相等,如果一方碰到结束符而另一方没有,则两者肯定不等。另外,判断输入了何种操作的时候应用了一个小技巧,不必去比较整体的string而只需比较其三者的第4个不同的字符,这样更为便捷。还有输出子串的函数不需要另写,直接判断合不合法后输出即可。