| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1186 人关注过本帖
标题:初学 c 字符串对比问题 有两个地方不太懂
只看楼主 加入收藏
daienkai
Rank: 1
等 级:新手上路
帖 子:30
专家分:7
注 册:2017-1-31
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:5 
初学 c 字符串对比问题 有两个地方不太懂
你会读到两个字符串,每个字符串占据一行,每个字符串的长度均小于10000字符,
而且第一个字符串的长度小于第二个字符串的。
你的程序要找出第一个字符串在第二个字符串中出现的位置,
输出这些位置,如果找不到,则输出-1。

#include <stdio.h>
char input1[100];//必须开全局变量!不然会有意外情况。
char input2[100];
int main() {
    char ch;
    long l1 = 0;
    long l2 = 0;
    while ((ch = getchar()) != '\n') {//有空格字符的输入
        input1[l1++] = ch;
    }
    while ((ch = getchar()) != '\n') {
        input2[l2++] = ch;
    }
    int flag = 0 , i = 0, h = 0 ;
    for ( i = 0; i < l2; i++)
     {
        for ( h = 0; h < l1; h++)
         {
            if (input1[h] != input2[i + h])  这里实在弄不清楚是怎么回事??
             {
                break;
            }
            if (h == l1 - 1)  还有这里又在干些什么 ??
             {
                printf("%d ", i);
                flag = 1;
            }
        }
    }
    if (!flag) {
        printf("-1");
    }
    return 0;
}





搜索更多相关主题的帖子: include 字符串 而且 
2017-02-07 17:15
daienkai
Rank: 1
等 级:新手上路
帖 子:30
专家分:7
注 册:2017-1-31
收藏
得分:0 
大神求救啊
2017-02-07 18:20
ldsh304
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:7
帖 子:242
专家分:755
注 册:2016-1-18
收藏
得分:5 
if (input1[h] != input2[i + h])//   假设字符串input1的首字符 是从input2[i]开始的,如果有不相同的,那么继续往下找  
{
                 break;
             }
             if (h == l1 - 1)//找出了input2包含input1的所有字符串
              {
                 printf("%d ", i);
                 flag = 1;
             }
2017-02-07 19:14
炎天
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:桃花岛
等 级:贵宾
威 望:29
帖 子:1218
专家分:4986
注 册:2016-9-15
收藏
得分:5 
自己拿笔演算一下

早知做人那么辛苦!  当初不应该下凡
2017-02-07 19:17
bjut_Allen
Rank: 9Rank: 9Rank: 9
来 自:平乐园工业技术学校
等 级:蜘蛛侠
威 望:8
帖 子:323
专家分:1223
注 册:2016-10-16
收藏
得分:5 
用两个for循环,遍历input1和input2,break是遇到不一样的进入下一次外部循环;
if (h == l1 - 1)这个是完成了对比,输出位置

Code is my life.
2017-02-07 22:48
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10607
专家分:43182
注 册:2014-5-20
收藏
得分:5 
是逐个字符比对的,如:
ababcdef...i=0
abcd.......h=2时break;

ababcdef...i=1
.abcd......h=0时break;

ababcdef...i=2
..abcd.....h=4时break, 即h==l1匹配,输出i;

#include <stdio.h>
int main()
{
    char input1[100];
    char input2[100];
    char ch;
    long l1 = 0;
    long l2 = 0;
    while ((ch = getchar()) != '\n')
    {
        input1[l1++] = ch;
    }
    input1[l1] = '\0';    //字符串结束符,因局部变量初始值可能不为0。
    while ((ch = getchar()) != '\n')
    {
        input2[l2++] = ch;
    }
    input1[l2] = '\0';
    int i = 0, h = 0 ;
    for ( i = 0; i < l2-l1+1; i++)
    {
        for ( h = 0; h < l1; h++)
        {
            if (input1[h] != input2[i + h])
            {
                break;
            }
        }
        if (h == l1)
        {
            printf("%d ", i);
            return 1;
        }
    }
    printf("-1");
    return 0;
}


[此贴子已经被作者于2017-2-8 06:05编辑过]

2017-02-08 06:04
快速回复:初学 c 字符串对比问题 有两个地方不太懂
数据加载中...
 
   



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

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