| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1461 人关注过本帖
标题:寻找字符串的问题
只看楼主 加入收藏
lolooze
Rank: 2
等 级:论坛游民
帖 子:9
专家分:21
注 册:2018-11-28
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:6 
寻找字符串的问题
题目
图片附件: 游客没有浏览图片的权限,请 登录注册



程序代码:
#include <stdio.h>
#include <string.h>
int main()
{
    char a[30],b[10];
    int m,n,len_a,len_b;
    /*scanf("%s",a);
    scanf("%s",b);*/
    gets(a);
    gets(b);
    len_a=strlen(a);
    len_b=strlen(b);
    for (m=0;m<len_a;m++)
    {
        if (a[m]==b[0])
        {
            for (n=0;n<len_b;n++)
            {
                if (a[m]!=b[n])
                    break;
            }
        }
        if (n==len_b-1)
            break;
    }
    if (n==len_b-1)
        printf("%d\n",m+1);
    return 0;
}


输入小写字母的时候就行,输入大写字母就不行了,为什么呀

[此贴子已经被作者于2019-2-22 10:48编辑过]

搜索更多相关主题的帖子: 字符串 strlen for break 字母 
2019-02-22 10:46
lxk1732942
Rank: 6Rank: 6
等 级:侠之大者
威 望:7
帖 子:450
专家分:425
注 册:2018-9-4
收藏
得分:7 
程序代码:
#include <stdio.h>
#include <string.h>
int main()
{
    char a[30], b[10];
    int m, n, len_a, len_b;
    /*scanf("%s",a);
    scanf("%s",b);*/
    gets(a);
    gets(b);
    len_a = strlen(a);
    len_b = strlen(b);

    m = -1;
    while (m < len_a)
    {
        n = 0; //记得重置n

        while (a[++m] != b[0]);

        while (++n < len_b)
            if (a[m + n] != b[n])
                break;

        if (n == len_b)
            break;
    }

    printf("%d\n", m + 1);

    return 0;
}
2019-02-22 13:19
lolooze
Rank: 2
等 级:论坛游民
帖 子:9
专家分:21
注 册:2018-11-28
收藏
得分:0 
回复 2楼 lxk1732942
谢谢你,那为什么我的代码不行呢
2019-02-22 17:50
豆豆的滴
Rank: 9Rank: 9Rank: 9
来 自:湖南
等 级:贵宾
威 望:33
帖 子:368
专家分:1087
注 册:2018-5-7
收藏
得分:5 
回复 3楼 lolooze
算法有问题吧?大小写应该都没啥关系
程序代码:
for (n=0;n<len_b;n++)
            {
                if (a[m]!=b[n])//这里应该不是都和a[m]比
                    break;
            }
2019-02-23 08:57
lolooze
Rank: 2
等 级:论坛游民
帖 子:9
专家分:21
注 册:2018-11-28
收藏
得分:0 
回复 4楼 豆豆的滴
我用t=m后t++,也是不行诶...哭辽...
2019-02-23 11:25
豆豆的滴
Rank: 9Rank: 9Rank: 9
来 自:湖南
等 级:贵宾
威 望:33
帖 子:368
专家分:1087
注 册:2018-5-7
收藏
得分:5 
回复 5楼 lolooze
帮你改一下
程序代码:
#include <stdio.h>
#include <string.h>
int main()
{
    char a[30];
    char b[10];
    int m,n,len_a,len_b,t;
    /*scanf("%s",a);
    scanf("%s",b);*/
    gets(a);
    gets(b);
    //printf("%s",a);
    len_a=strlen(a);
    
    len_b=strlen(b);
    
    for (m=0;m<len_a;m++)
    {
        if (a[m]==b[0])
        {
            for (n=0;n<len_b;n++)
            {
                if (a[m+n]!=b[n])
                    break;
                t=n;//这里标记一下
            }
            
        }
       if (t==len_b-1)
            break;
    }
    if (t==len_b-1)
        printf("%d\n",m+1);
    return 0;

}
2019-02-23 17:19
waterstar
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:5
帖 子:984
专家分:2810
注 册:2010-2-12
收藏
得分:3 
程序代码:
    for (m=0;m<len_a;m++)
    {
        /* 下面的这种判断是多余的,循环中已经包含了这个判断 */
        // if (a[m]==b[0])
        for (n=0;n<len_b;n++)    // 注意这里的n最后会增大到len_b,所以n<len_b验证失败,无法进入循环
        {
            if (a[m + n]!=b[n])
                break;
        }
        if (n==len_b)    // 这里的判断就是等于len_b,而不是len_b - 1
            break;
    }
    if (n==len_b)
        printf("%d\n",m+1);

冰冻三尺,非一日之寒;士别三日,不足刮目相看!
2019-02-28 15:57
快速回复:寻找字符串的问题
数据加载中...
 
   



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

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