数据结构实验之串二:字符串匹配(串)

来源:互联网 发布:机器人算法工程师 编辑:程序博客网 时间:2024/06/01 14:50

Think:
继前面两篇1650行和400行代码相比, 这个就比较正常了;
主要就是用串的 方法来做

Problem Description

给定两个字符串string1和string2,判断string2是否为string1的子串。

Input

输入包含多组数据,每组测试数据包含两行,第一行代表string1,第二行代表string2,string1和string2中保证不出现空格。(string1和string2大小不超过100字符)

Output

对于每组输入数据,若string2是string1的子串,则输出”YES”,否则输出”NO”。

Example Input

abc
a
123456
45
abc
ddd
Example Output

YES
YES
NO

#include<bits/stdc++.h>using namespace std;#define INF 0x3f3f3ftypedef struct{    char *ch;    int length;}String;int initstring(String &S)//³õʼ»¯{    S.ch = (char *)malloc(INF * sizeof(char));    if (!S.ch) exit(0);    S.length = 0;    return 1;}void StrAssign(String &S, char str[]){    int len = 0;    int k = 0;    while(str[len] != '\0')        len ++;    for (int i = 0;i <= len - 1;i ++)    {        if (str[i] != ' ')        {            S.ch[k ++] = str[i];            S.length ++;        }    }}int index(String &A,String &B){    int i,j;    if (B.length > A.length)    {        cout << "NO" << endl;        return 0;    }    j = 0;    int k;    for (i = 0; i < A.length; i ++)    {        k = i;        while (A.ch[i]==B.ch[j])        {            j ++;            i ++;            if (j >= B.length)            {                cout << "YES" << endl;                return 0;            }            if (A.ch[i] != B.ch[j])            {                j = 1;                i = k;                break;            }        }    }    cout<<"NO"<<endl;    return 0;}//int judge(String &S)//{//    int i = 0;//    int j = S.length - 1;//    int flag = 1;//    for (i = 0;i <= j;)//    {//        if (S.ch[i] != S.ch[j])//        {//            flag = 0;//            return flag;//        }//        i ++;//        j --;//    }//    return flag;//}////int Strcmp(char str1[])//{//    int flag = 0;//    if (str1[0] == '2' && str1[1] == '0' && str1[2] == '1' && str1[3] == '3')//        flag = 1;//    return flag;//}//void Concat(String &T,String &A, String &B)//{//    int i;//    int k = 0;//    for (i = 0;i <= A.length - 1;i ++)//        T.ch[k ++] = A.ch[i];//    for (i = 0;i <= B.length - 1;i ++)//        T.ch[k ++] = B.ch[i];//    T.length = A.length + B.length;//}//void Display(String &T)//{//    int i;//    for (i = 0;i <= T.length - 1 ;i ++)//    {//        if (i == T.length - 1)//            cout << T.ch[i] << endl;//        else//            cout << T.ch[i];//    }//}int main(){    char str1[1000050];    char str2[10050];    while(cin >> str1)    {        cin >> str2;        String A, B;        initstring(A);        initstring(B);        StrAssign(A , str1);        StrAssign(B , str2);        index(A , B);    }}
原创粉丝点击