PTA 函数题 模式匹配(C++)

给出主串s和模式串t,其长度均不超过1000。本题要求实现一个函数BF(string s, string t),求出模式串t在主串s中第一次出现的位置(从0开始计算),如果在s中找不到t,则输出-1。
函数接口定义:

/* s为主串,t为模式串。
 * 函数返回t在s中第一次出现的位置。
 */
int BF(string s, string t);

其中 s 和 t 分别为主串和模式串,长度均不超过1000。函数返回模式串t在主串s中第一次出现的位置(从0开始计算),如果在s中找不到t,则输出-1。
裁判测试程序样例:

#include <bits/stdc++.h>
using namespace std;

/* s为主串,t为模式串。
 * 函数返回t在s中第一次出现的位置。
 */
int BF(string s, string t);

int main(int argc, char const *argv[])
{
    string s, t;
    getline(cin, s);    //输入主串
    getline(cin, t);    //输入模式串
    int pos = BF(s, t);    //搜索
    cout << pos << endl;//输出模式串在主串中第一次出现的位置
    return 0;
}

/* 请在这里填写答案 */

输入样例1:

This is a test string
is

输出样例1:

2

输入样例2:

This is a test string
The

输出样例2:

-1

函数如下:

int BF(string s1,string s2){
 int len1=s1.length();//第一个字符串长度 
 int len2=s2.length();//第二个字符串长度 
 int n=0;
 for(int i=0;i<len1;i++){
  int k=i,j;
  for(j=0;j<len2;j++,k++){
   if(s1[k]!=s2[j])  //有不同字符时跳出循环 
   break;
  }
  if(j==len2){   // 如果成功匹配循环结束时,j的值为len2 
   return i;
   break;
  }
 }
 return -1;
}
  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
©️2020 CSDN 皮肤主题: 游动-白 设计师:白松林 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值