c语言设置标题字体,关于C语言字符串操作的几个题目

第一题是:写一函数,实现删除字符串str1中含有的字符串str2。这一题不难,但是有个 KMP优化算法,大家有兴趣可以查看资料看一下。

第二题是:给定的字符串A和B,输出A和B中的最大公共子串。本人的代码是:

#include

#include

void UtMost_ComStr(char* s1,char* s2)//imagine: s1 is longer

{

int maxLength=0,length=0,i=0;

char *p1=s1,*p1_1=s1,*p2=s2,*p2_2=s2;;

char *maxStartAddr=s1;

while(*p1!=0)

{

if(*p1==*p2)

{

length++;

if(length>maxLength)

{

maxLength=length;

maxStartAddr=p1_1;

}

p1++;

p2++;

}

else if((*p1!=*p2)&& *p2!=0)

{

length=0;

p1=p1_1;

p2_2++;

p2=p2_2;

}

else if(*p2==0)

{

length=0;

p1_1=s1++;

p1=p1_1;

p2_2=s2;

p2=p2_2;

}

}

printf("Max Length is %d\n",maxLength);

printf("The longest same string is:\n");

while(i

{

putchar(*maxStartAddr);

i++;

maxStartAddr++;

}

}

void main()

{

char *s1="aocdfe";

char *s2="pmcdfa";

UtMost_ComStr(s1,s2);

}

本人又从网上看了别人写的算法,发现有几个操作字符串很方便的函数:如下char *commanstring(char shortstring[], char longstring[])

{

int i, j;

char *substring=malloc(256);

if(strstr(longstring, shortstring)!=NULL) //如果……,那么返回shortstring

return shortstring;

for(i=strlen(shortstring)-1;i>0; i--) //否则,开始循环计算

{

for(j=0; j<=strlen(shortstring)-i; j++){

memcpy(substring, &shortstring[j], i);

substring[i]='\0';

if(strstr(longstring, substring)!=NULL)

return substring;

}

}

return NULL;

}

main()

{

char *str1=malloc(256);

char *str2=malloc(256);

char *comman=NULL;

gets(str1);

gets(str2);

if(strlen(str1)>strlen(str2)) //将短的字符串放前面

comman=commanstring(str2, str1);

else

comman=commanstring(str1, str2);

printf("the longest comman string is: %s\n", comman);

}

该算法其中的精髓就在于strstr()这个函数,在此学习了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值