| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1368 人关注过本帖
标题:oj字符串匹配问题
只看楼主 加入收藏
rainnese
Rank: 1
来 自:广州
等 级:新手上路
帖 子:51
专家分:0
注 册:2016-1-15
结帖率:56.25%
收藏
已结贴  问题点数:6 回复次数:4 
oj字符串匹配问题
Description
设计一个程序,从一个主字符串中查找一个子字符串在主串中第一次出现的位置。主串和子串的长度不超过100。如果找不到,则输出-1.


Input
第一行输入一个整数N,说明需要进行匹配的实例数。
第二行输入第一组需要进行匹配的主串
第三行输入第一组需要匹配的子字符串。
以下各行按照上面两行的格式输入,直到输入了N组匹配实例。


Output
输出N行,每行显示对应的匹配组中子串在主串中第一次出现的位置。


Sample Input
Original Transformed

3
abaaaaaa
a
bacdeagb
ac
aaaa
bb
3[EOL] abaaaaaa[EOL] a[EOL] bacdeagb[EOL] ac[EOL] aaaa[EOL] bb[EOL] [EOF]

Sample Output
Original Transformed

1
2
-1
我写的程序是
#include<stdio.h>
#include<string.h>
int cmop(char *p, char *q)
{
    int flag = 0,t=0;
    for (int i = 0,j=0;j < strlen(p);)
    {
        if (*(p + j) == *(q + i))
        {        
            if(t==0)t = j+1;
            if (i == strlen(q)-1)return t;
            i++;j++;flag = 1;
        }
        else
        {
            i = 0;j++;flag = 0;t = 0;
        }
    }
    if (flag == 0)return -1;
}
int main()
{
    char str[100],str1[100];
    int n,flag=0;
    scanf("%d", &n);
    while (n--)
    {
        memset(str, 0, sizeof(str));
        memset(str1, 0, sizeof(str1));
        scanf("%s", str);
        //char ch = getchar();
        scanf("%s", str1);
        printf("%d\n", cmop(str, str1));
    }
    return 0;
}
答案错,为什么?
搜索更多相关主题的帖子: 字符串 
2016-01-24 18:08
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:4 
字符串比较的算法不对。试试看aab,ab的比较结果是什么。

重剑无锋,大巧不工
2016-01-25 10:11
rainnese
Rank: 1
来 自:广州
等 级:新手上路
帖 子:51
专家分:0
注 册:2016-1-15
收藏
得分:0 
回复 2楼 beyondyf
我改成这样了,怎么还是错
#include<stdio.h>
#include<string.h>
int cmop(char *p, char *q)
{
    int flag = 0,t=0;
    for (int i = 0,j=0;j < strlen(p);)
    {
        if (*(p + j) == *(q + i))
        {        
            if(t==0)t = j+1;
            if (i < strlen(q)-1) { i++;j++; }
            flag = 1;
            if (i == strlen(q)-1)return t;
            
        }
        else
        {
            i = 0;j++;flag = 0;t = 0;
        }
        if (strlen(p) - j < strlen(q) - i)return -1;
    }
    if (flag == 0)return -1;
}
int main()
{
    char str[100],str1[100];
    int n,flag=0;
    scanf("%d", &n);
    while (n--)
    {
        memset(str, 0, sizeof(str));
        memset(str1, 0, sizeof(str1));
        scanf("%s", str);
        scanf("%s", str1);
        printf("%d\n", cmop(str, str1));
    }
    return 0;
}

计算机专业的大学生
2016-01-26 21:56
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
回复 3楼 rainnese
因为你还没改对

重剑无锋,大巧不工
2016-01-26 22:55
拉链
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:107
专家分:534
注 册:2016-1-22
收藏
得分:2 
回复 3楼 rainnese
验证aaaa,ab试试
2016-01-27 07:26
快速回复:oj字符串匹配问题
数据加载中...
 
   



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

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