现在的位置: 首页 > 综合 > 正文

关于C语言字符串操作的几个题目

2013年09月14日 ⁄ 综合 ⁄ 共 1387字 ⁄ 字号 评论关闭

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

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

#include<stdio.h>
#include<string.h>
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<maxLength)
	{
		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()这个函数,在此学习了

抱歉!评论已关闭.