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

我在刷一道教学平台发布的题,这一到就很简单,让我觉得有点离谱。虽然我过了程序,但有一个样例我却不能通过。
题目如下:
模式匹配是严格的匹配,即强调模式在主串中连续性,例如,模式“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

中文字符所占空间的大小与编码有关,常见的编码比如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<<"的子序列!";
    }
}
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632