C语言用指针实现strindex(s,t)函数,该函数返回字符串t在字符串s中的位置

bcai_yuan 2017-03-23 10:12:46
#include<stdio.h>

/*返回t在s中的位置*/
int strindex(char *s,char *t)
{
char *b = s; //beginning of string s
char *p,*r;

for(; *s!='\0'; s++){
for(p=s,r=t; *r!='\0' && *p==*r; p++,r++)
;
if(r > t && *r=='\0')
return s - b;
}
return -1;
}
这是答案中的代码,但是运行的时候只有t在s的结尾才能返回正值,如果t在s中间就都是负值。求问大神这是什么问题啊!
...全文
845 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
bcai_yuan 2017-03-27
  • 打赏
  • 举报
回复
这个是getline函数 #include <stdio.h> #include<string.h> void getline(char *s,int lim) { int c,i; for(i=0;(((c=getchar())!=EOF) && (c!='\n'));++i){ if(i<lim-2){ *s = c; s++; } } if(c=='\n'){ *s=c; s++; } *s='\0'; }
自信男孩 2017-03-23
  • 打赏
  • 举报
回复
#include<stdio.h>

/*返回t在s中的位置*/
int strindex(char *s,char *t)
{
    char *b = s;
    char *p,*r;

    for(; *s !='\0'; s++){
        for(p = s, r = t; *r && *p == *r; p++, r++)
            ;
        if(r > t && *r=='\0')
            return s - b;
    }
    return -1;
}


int main(void)
{
    char *str = "helloworld";
    char *sub_str = "ld";

    printf("pos = %d\n", strindex(str, sub_str));

    return 0;
}
没有什么问题,返回负值,你要看这个负值是不是-1,若字串在主串里,那么返回的不可能是赋值,因为s - b不会得负值,除非没有找到字串; 如果是返回-1,并且你认为是在主串里,那么可以发一下你的测试用例。
vnvlyp 2017-03-23
  • 打赏
  • 举报
回复
你怎么调用的,代码贴一下。 这个貌似没问题啊
vnvlyp 2017-03-23
  • 打赏
  • 举报
回复
你这个getline是哪个getline啊。。
bcai_yuan 2017-03-23
  • 打赏
  • 举报
回复
已经解决了
因为我调用的是getline函数,s和t的结尾都是以“\n\0”结尾的,所以在判断是否到达结尾的时候应该用\n来判断,而不是\0,
谢谢了!
bcai_yuan 2017-03-23
  • 打赏
  • 举报
回复
main()
{
char s[MAX],t[MAX];
getline(s,MAX);
getline(t,MAX);
printf("位置为:%d\n",strindex(s,t));
}
这个是main函数调用的

70,020

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧