[GDUT]1058: simone牌文本编辑器

1058: simone牌文本编辑器
Time Limit: 1 Sec Memory Limit: 128 MB
Submit: 76 Solved: 19
Description

Problem Description
Simone打算写一个功能强大的文本编辑器,并取一个炫酷拉风,高端优雅的名字,比如“simone牌文本编辑器”之类的。既然功能强大,那肯定得有个查找功能吧。但是她在完成这个功能的时候遇到一点小问题。现在来请求你的帮助。
给你一个文本串s,和一个模式串k,你需要写一个程序来查找k在s中出现了多少次。
Input
输入文件的第一行是一个正整数T,表示总共有T组测试数据。
接下来有T组测试,每组测试数据包括两行。第一行是文本串s,长度不大于10000。第二行是模式串k,长度不大于10。都是只有小写字母组成的字符串。
Output
每组测试对应输出一个正整数答案,表示k在s中出现了多少次。
Sample Input
2
abababa
aba
abcabc
abc
Sample Output
3
2

【关键点】长的字符串去匹配短的字符串首字符

#include<stdio.h>
#include<string.h>

int main()
{
    int n, i, lengthS, lengthK, d, j, m;
    char str[10000], mode[10];

    while(scanf("%d", &n)!=EOF){
        for(i=0; i<n; i++){
            lengthS = 0;
            lengthK = 0;
            int count = 0;//配对数初始为0

            scanf("%s%s", str, mode);
            lengthS = strlen(str);
            lengthK = strlen(mode);

            for(d=0; d<lengthS; d++){
                if(str[d] == mode[0]){  
                    count++; //配对了第一个元素,先算作配对了一组 
                    if(lengthK==1){//当模式串为一个字符串时,没有下一个模式串数组元素 需要核对 
                        continue;
                    } 
                    for(j=1; j<lengthK; j++){
                         if(str[d+j]!=mode[j] || (d+j)>=lengthS){ //避免文本串为ada,字符串为ad,最后一个a配对a中的a就默认存在ad 
                            count--;//并非每个元素都匹配,不符合 
                            break;        
                        }  
                    } 
               } 
            }  
            printf("%d\n", count);
        }
    }
    return 0;
}

这里写图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值