标题:问问各位大神,为什么输出不了结果?
只看楼主
凌灬轻扬
Rank: 1
等 级:新手上路
威 望:1
帖 子:28
专家分:0
注 册:2016-10-8
结帖率:80%
已结贴  问题点数:15 回复次数:14 
问问各位大神,为什么输出不了结果?
//计算字符串中子串出现的次数
#include <stdio.h>
#include <string.h>

int main()
{
    int i,j,times;
    char str1[20],str2[20];
    i=0,j=0,times=0;
    printf("please input a string(母):");
    scanf("%s",&str1[20]);
    printf("please input a string(子):");
    scanf("%s",&str2[20]);
    while(str1[i]!='\0')
    {
        while(str2[j]!='\0')
        {
            if(str1[i]==str2[j])
            {
                i++;
                j++;
            }
            else
            {
                if(j==0)    //
                {
                    i++;
                }
                j=0;
            }
        }
        times++;
        j=0;
    }
    printf("%d",times);
    return 0;
}
搜索更多相关主题的帖子: include please 字符串 
2016-12-08 09:12
grmmylbs
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:54
帖 子:1409
专家分:5845
注 册:2016-2-14
得分:5 
字符串读取有问题,另外可以用库函数strstr()更方便一点。

程序代码:
#include <stdio.h>
#include <string.h>

int main()
{
    int i, j, times,len1,len2;
    char str1[20], str2[20];
    i = 0, j = 0, times = 0;
    printf("please input a string(母):");
    scanf("%s", str1);
    len1 = strlen(str1);
    printf("please input a string(子):");
    scanf("%s", str2);
    len2 = strlen(str2);
    while (str1[i] != '\0')
    {
        if ((str1[i] == str2[0]) && ((i + len2) <= len1))
        {
            while (str2[j] != '\0')
            {
                if (str1[i+j] != str2[j])
                {
                    break;
                }
                j++;
            }
        }
        i++;
        if (j == len2)
        {
            times++;
        }
        j = 0;
    }
    printf("%d", times);
    return 0;
}
2016-12-08 09:36
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
得分:5 
虽然用strstr比较方便,但是从积累经验的角度来说,尽量少用库函数打长一点代码对熟悉有关用法是有好处的。

像pow,strlen,strcpy,strstr这样的库函数手写不难

当然,经验老到或者用于速解可以多用库函数辅助

这题我看过相关练习,是用指针处理的

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2016-12-08 10:12
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:5 
回复 3楼 九转星河
声明不能使用string.h
2016-12-08 10:42
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
得分:0 
回复 4楼 吹水佬
弄了个……暂时没有发现问题,不过没有经过全覆盖测试,看看效果如何

程序代码:
#include<stdio.h>

int Mystrlen(char *p)
{
    char *pl=p;

    while (*p++!='\0');
        
    return (p-pl-1);
    
}
char *fun(char *p1,char *p2)
{
    char *ps=p2;

    while (*p1)
    {
        if (*p1++==*p2)
            *p2++;
        else
            p2=ps;

        if (!*p2)
            return (p1-p2+ps);
    }

    return (p1);
}
int main()
{
    char s1[80],s2[80];
    char *p1,*p2;
    int L1,L2;
    int count=0;

    p1=s1;
    p2=s2;

    gets(s1);
    gets(s2);

    L1=Mystrlen(s1);
    L2=Mystrlen(s2);

    while (*p1)
    {
        p1=fun(p1,p2);

        if (!*p1)
            break;

        count++;
        p1++;
    }

    printf("%d\n",count);

    return 0;
}


[此贴子已经被作者于2016-12-8 14:53编辑过]


[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2016-12-08 14:37
凌灬轻扬
Rank: 1
等 级:新手上路
威 望:1
帖 子:28
专家分:0
注 册:2016-10-8
得分:0 
回复 4楼 吹水佬
我一开始写的时候,以为能用到呢。到后来就没删了
2016-12-09 21:38
凌灬轻扬
Rank: 1
等 级:新手上路
威 望:1
帖 子:28
专家分:0
注 册:2016-10-8
得分:0 
回复 2楼 grmmylbs
字符串读取是用scanf好,还是用gets
还有字符 是用scanf好,还是getchar
2016-12-09 21:43
凌灬轻扬
Rank: 1
等 级:新手上路
威 望:1
帖 子:28
专家分:0
注 册:2016-10-8
得分:0 
回复 3楼 九转星河
好的,谢谢了
2016-12-09 21:59
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
得分:0 
回复 7楼 凌灬轻扬
网上查资料不推荐使用gets,具体原因自己上网搜。一般是用scanf("%[^\n]%*c",str);来读取字符串,如果用fgets,输入源则用stdin至于读取的单个字符,则我就没有细究了,最好上网查查资料

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2016-12-09 22:05
凌灬轻扬
Rank: 1
等 级:新手上路
威 望:1
帖 子:28
专家分:0
注 册:2016-10-8
得分:0 
回复 9楼 九转星河
嗯,谢谢了
2016-12-10 09:00



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




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

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