阅读程序-1解析

本程序是判别冒号前的字符串是否是冒号后的字符串的子序列。(子序列并不一定连续,但先后顺序一样)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
/**************************************************************** 
 * Description: 
 * Author: Alex Li
 * Date: 2023-09-07 10:30:32
 * LastEditTime: 2023-09-07 11:14:05
****************************************************************/
#include <iostream>
using namespace std;

int main() {
    char a[100][100], b[100][100];
    string c[100];
    string tmp;
    int n, i = 0, j = 0, k = 0, total_len[100], length[100][3];
    cin >> n;
    getline(cin, tmp);//读入换行符,避免后面出错
    for (i = 0; i < n; i++) { 
        getline(cin, c[i]);  //读入三个字符串
        total_len[i] = c[i].size();
    }
    for (i = 0; i < n; i++) {
        j = 0;  
        while (c[i][j] != ':') {//将冒号:前的字符串存入a[i][]
            a[i][k] = c[i][j];
            k = k + 1;  //统计冒号前的字符个数
            j++;    //j是冒号的位置,后面字符开始于j+1
        }
        length[i][1] = k - 1; //冒号前的字符串长度,前面k多加了。
        a[i][k] = 0;  //加上字符'\0',字符串结束,因为'\0'的ASII码是0 
        k = 0;
        for (j = j + 1; j < total_len[i]; j++) {//冒号后面字符存入b[i][]
            b[i][k] = c[i][j];
            k = k + 1;
        }
        length[i][2] = k - 1; //同上
        b[i][k] = 0;
        k = 0;
    }
    for (i = 0; i < n; i++) {//遍历3个字符串
        if (length[i][1] >= length[i][2]) //若冒号:前面字符个数多,输出“NO”
            cout << "NO,";
        else {
            k = 0;
            for (j = 0; j < length[i][2]; j++) {//遍历b[i][]的每一个字符
                if (a[i][k] == b[i][j]) //如果有相同的字符,移动到a[i][]字符串的下一个字符
                    k = k + 1;
                if (k > length[i][1])//如果a[i][]中的字符都找到了,推出循环。
                    break;
            }
            if (j == length[i][2])
                cout << "NO,";//说明中途没有退出循环,也就是a[i][]没在b[i][]里
            else
                cout << "YES,"; //中途退出循环,说明a[i][]在b[i][]里
            }
    }
    cout << endl;
    return 0;
}

输入:
3
AB:ACDEbFBkBD
AR:ACDBrT
SARS:Severe Atypical Respiratory Syndrome

Scroll to Top