C语言之面试题(五)

两个字符串,s,t把t字符串插入到s字符串中,s字符串有足够的空间存放t字符串

void insert( char* s, char* t)
{
	char* s_temp=s;
	char* t_temp=t;
	while(*s_temp!='\0')
	s_temp++;
	while(*t_temp!='\0')
	{
		*s_temp=*t_temp;
		t_temp++;
		s_temp++;
	}
	*s_temp='\0';
	
}

又或者直接用memcpy函数 

void *memcpy(void *dest, const void *src, size_t n);
从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中

int sprintf( char *buffer, const char *format, [ argument] … ); //字符串格式化函数
buffer:char型指针,指向将要写入的字符串的缓冲区。
format:格式化字符串。
[argument]...:可选参数,可以是任何类型的数据
strstr(str1,str2) 函数用于判断字符串str2是否是str1的子串。如果是,则该函数返回str2在str1中首次出现的地址;否则,返回NULL。



char* lcs(char *str1,char *str2)

{

	int len1,len2;

	int i,j;

	char *shorter,*longer,*substr;

	if(str1 == NULL || str2 ==NULL)return NULL;

 

	len1 = strlen(str1);

	len2 = strlen(str2);

 

	if(len1 < len2)

	{

		shorter = str1;

		longer = str2;

	}

	else 

	{

		shorter = str2;

		longer = str1;

	}

 

	if(strstr(longer,shorter) != NULL) return shorter;

 

	len1 = strlen(shorter);

	substr = (char*)malloc(len1 + 1);

 

	for(i = len1 - 1; i > 0;i--)

	{

		for(j = 0; j <= len1 - i; j++)

		{

			memcpy(substr,&shorter[j],i);

			substr[i] ='\0';

			if(strstr(longer,substr) != NULL) return substr;

 

		}

	}

 

	return NULL;

 

 

}

猜你喜欢

转载自blog.csdn.net/weixin_40288381/article/details/81148669