上面的程序没有解决问题,下面这种情况没考虑到:
1、如果str1包含str2的前n个字符(n<strlen(str2)),则程序是错的。
所以我自己写了下,代码如下:
程序代码:
#include <stdio.h>
#include <string.h>
void cat(char *str1,char *str2)
{
char *pS; /* 大字符串指针*/
char *pD; /* 小字符串指针*/
int status = 0; /* 位置,返回 */
int count = 0; /* 计算相等字符数,以便位置移动*/
pS = str1;
pD = str2;
while(*pS != 0) /*大字符串末尾*/
{
if (*pS == *pD) /*如果字符相等,移动两个字符串指针,并且相等字符数+1*/
{
pS++;
pD++;
count++;
}
else /*如果字符不相等,只移动大字符串指针,并且将小字符串指针定位到首字符,同时移动位置到当前位置,且将计数变量赋0*/
{
pS++;
pD = str2;
status += count + 1;
count = 0;
}
if (*pD == 0) /* 已经找到了,退出while循环,以节约开支 */
break;
}
if (*pD == 0) /*成功包含*/
{
printf(\"\nStr1 include str2!\");
printf(\"\nAnd the status is:%d\n\",status);
}
else /*不包含*/
{
printf(\"\nStr1 do not include str2!\n\");
}
}
int main(void)
{
char str1[] = \"abcegdfceg\";
char str2[] = \"cefg\";
cat(str1,str2);
return 0;
}