标题:谁能告诉我错在哪里了
只看楼主
逗比
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2014-10-31
结帖率:60%
 问题点数:0 回复次数:4 
谁能告诉我错在哪里了
写一个函数int find( char *s1, char *s2),函数find的功能是查找串s1中是否包含指定的词(s2指向),如果存在则返回第1次出现的位置,否则返回-1.约定串中的词由1个或1个以上的空格符分隔。
输入格式:
分别输入串s1和词s2
输出格式:
如果存在,输出--- >    词%s第一次出现的位置是%d\n
如果不存在,输出--- >  无此词  
输入样例1:
I am a student,you are a student too.
student
输出样例1:
词student第一次出现的位置是8
输入样例2:
I am a student.
you
输出样例2:
无此词
#include<stdio.h>
int find(char*s1,char*s2)
{
    int i=0,j=0;
    char*p=s2;
    for(;s1!='\0';s1++,i++)
    {
        if (*s1!=*s2)
        {
            s2=p;
            j=0;
        }
        if (*s1==*s2)
        {
            j++;
            s2++;
            if (*s2=='\0')
            {
                return i-j+2;
            }
        }
        return -1;
    }
     
}
int main()
{
    int t;
    char a[100],b[100];
    gets(a);
    printf("\n");
    gets(b);
    t=find(a,b);

    if(t!=-1)
    {
        printf("词%s第一次出现的位置是%d\n",b,t);
    }
    else
    {
        printf("无此词");
    }
    return 0;
}
搜索更多相关主题的帖子: include 汽车 
2015-05-16 15:22
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
得分:0 
find函数逻辑错误,按你的思路改为下述代码即可:
程序代码:
#include<stdio.h>
int find(char*s1,char*s2)
{
    int i,j;
    char*p;
    for(i=0,p=s2;*s1!='\0';s1++,i++)
    {
        if (*s1!=*s2)
        {
            j=i;
            s2=p;
        }
        else
        {
            s2++;
            if (*s2=='\0')return j+2;
        }
    }
    return -1;
}

传进指针后,最好不要使用指针自加减,把指针当作数组来操作的话可读性强些,比如使用数组模式访问指针的话代码如下:。

程序代码:
int find(char*s1,char*s2)
{
    int i,j;
    for(i=0,j=0;s1[i];i++)
    {
        if (s1[i]!=s2[j])
            j=0;
        else
        {
            j++;
            if(!s2[j])return i-j+2;
        }
    }
    return -1;
}


能编个毛线衣吗?
2015-05-16 16:24
maqiangdemo
Rank: 2
等 级:论坛游民
帖 子:78
专家分:98
注 册:2014-2-26
得分:0 
回复 2楼 wmf2014
用数组写的读起来清晰多了
2015-05-17 09:34
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
得分:0 
回复 3楼 maqiangdemo
任何事情都有两面性。虽然数组模式好理解,但数组模式不一定是最优化代码。
如果是指针自加减,可能会编译为立即寻址方式,类似于mov eax,[地址],也可能编译为変址寻址方式,类似于mov eax,[ebx],但如果把指针使用为数组方式,则可能编译为基址+変址的寻址方式,类似指令为mov eax,[esi+ebx],很显然,寻址时要对地址进行一次加法,会增加指令执行时间。

能编个毛线衣吗?
2015-05-17 10:29
wuyouyao
Rank: 1
来 自:广东茂名
等 级:新手上路
帖 子:9
专家分:0
注 册:2015-4-29
得分:0 
最好用函数来解决,main函数就更清晰
2015-05-17 10:59



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-445379-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.098922 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved