???OY 2015-10-19 06:56 采纳率: 44.4%
浏览 1635
已采纳

我编的这个函数为什么没能实现功能?

7.编写一个函数string_in(),它接受两个字符串指针参数。如果第二个字符串被包含在第一个字符串中,函数就返回被包含的字符开始的地址。例如,string_in("hats","at")返回hats中a的地址,则,函数返回空指针。在一个使用循环语句为这个函数提供输入的完整程序中进行测试。
char string_in(char *p1,char *p2){
int m = 0;
int i;
char *p3 = p2;
char *p4;
while(*p1 != *p2)
++p1;
p4 = p1;
while(*p3 != '\0'){
p3++;
m++;
}
for(i = 0;i < m;i++){
if(
++p1 != *++p2)
return NULL;

}
return p4;

}
正确答案:
char string_in(char *p1,char *p2)
{
char *p1_save = p1, *p2_save = p2;
if(*p1 == '\0' || *p2 == '\0') return NULL;
while(1)
{
if(*p1 == *p2)
{
if(
++p2 == '\0') return p1_save;
if(*++p1 == '\0') return NULL;
}
else
{
if(*++p1 == '\0') return NULL;
p1_save = p1;
p2 = p2_save;
}
}
}
我感觉有点想不到?还有其他方法吗?

  • 写回答

4条回答 默认 最新

  • Jo_huang 2015-10-19 07:35
    关注

    char* string_in(char *p1,char *p2)
    {
    for(int i=0;p1[i]!='\0';i++)
    {
    if(p1[i]==p2[0])
    {
    int j=1;
    for(;p2[j]!='\0';j++)
    {
    if(p2[j]!=p1[i+j]) break;
    }
    if(p2[j]=='\0') return &(p1[i]);//如果p2已经遍历到了结尾,说明全部字符匹配
    }

    }
    return NULL;
    

    }

    
    

    首先,你的方法里面用while计算出m作为for循环的计数值,这是没有必要的,直接判断是否到达结尾'\0'就行了,另外,返回的应该是char *,而不是char.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python
  • ¥15 要给毕业设计添加扫码登录的功能!!有偿
  • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥15 stable diffusion
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘