Moon_quakes_xi 2022-03-18 17:30 采纳率: 66.7%
浏览 93
已结题

在实现非连续性模式匹配时中文汉字怎么处理?

我在刷一道教学平台发布的题,这一到就很简单,让我觉得有点离谱。虽然我过了程序,但有一个样例我却不能通过。
题目如下:
模式匹配是严格的匹配,即强调模式在主串中连续性,例如,模式“bc”是主串“abcd”的子串,而“ac”就不是主串“abcd”的子串。
但在实际应用中,有时并不需要模式的连续性,例如,模式“哈工大”与主串“哈尔滨工业大学”是非连续匹配的,称模式“哈工大”是主串“哈尔滨工业大学”的子序列(解释:意思就是:有部分字符匹配,子串中的所有字符都是来自于子串,而且顺序一致)。
设计算法,判定给定的模式是否为两个主串的公共子序列。

【测试数据】
输入:
哈尔滨工业大学
哈工大
输出:
哈工大是哈尔滨工业大学的子序列!

输入:
abcdefg
xyz
输出:
xyz不是abcdefg的子序列!

【提示】
实现这个代码可以不采用KMP算法。

没错就是这个中文样例。是不是一个中文字符所占的内存不同啊??
具体代码如下

#include<iostream>
#include<string.h>
using namespace std;
const int LEN=1e5;
int main(){
    char str1[LEN];
    char str2[LEN];
    cin>>str1;
    cin>>str2;
    int lenS=strlen(str1);
    int lenT=strlen(str2);
    int i,j;
    while(j<lenT&&i<lenS){
        if(str1[i]==str2[j]){
            i++;
            j++;
        }
        else{
            i++;
        }
    }
    if(j==lenT){
        cout<<str2<<"是"<<str1<<"的子序列!"; 
    }
    else{
        cout<<str2<<"不是"<<str1<<"的子序列!"; 
    }
} 

我的样例输出:
哈工大不是哈尔滨工业大学的子序列

我试着打印了一下母串跟字串的长度
分别是:
14
6
而打印出来的 j 是:
4199739

  • 写回答

2条回答 默认 最新

  • 易水卷长空 2022-03-18 18:12
    关注

    中文字符所占空间的大小与编码有关,常见的编码比如GBK什么的,每个中文字符占空间的大小是相等的。
    你程序的主要问题是i,j没有初始化:

    #include<iostream>
    #include<string.h>
    using namespace std;
    const int LEN=1e5;
    int main(){
        char str1[LEN]={0};
        char str2[LEN]={0};
        cin>>str1;
        cin>>str2;
        int lenS=strlen(str1);
        int lenT=strlen(str2);
        int i=0,j=0;//初始化!
        while(j<lenT&&i<lenS){
            if(str1[i]==str2[j]){
                i++;
                j++;
            }
            else{
                i++;
            }
        }
        if(j==lenT){
            cout<<str2<<"是"<<str1<<"的子序列!";
        }
        else{
            cout<<str2<<"不是"<<str1<<"的子序列!";
        }
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 3月26日
  • 已采纳回答 3月18日
  • 创建了问题 3月18日

悬赏问题

  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改