CCF CSP 201409-3 字符串匹配

CCF計算機職業資格認證考試題解系列文章爲meelo原創,請務必以連接形式註明本文地址html

CCF CSP 201409-3 字符串匹配

問題描述

  給出一個字符串和多行文字,在這些文字中找到字符串出現的那些行。你的程序還需支持大小寫敏感選項:當選項打開時,表示同一個字母的大寫和小寫看做不一樣的字符;當選項關閉時,表示同一個字母的大寫和小寫看做相同的字符。

輸入格式

  輸入的第一行包含一個字符串S,由大小寫英文字母組成。
  第二行包含一個數字,表示大小寫敏感的選項,當數字爲0時表示大小寫不敏感,當數字爲1時表示大小寫敏感。
  第三行包含一個整數n,表示給出的文字的行數。
  接下來n行,每行包含一個字符串,字符串由大小寫英文字母組成,不含空格和其餘字符。

輸出格式

  輸出多行,每行包含一個字符串,按出現的順序依次給出那些包含了字符串S的行。

樣例輸入

Hello
1
5
HelloWorld
HiHiHelloHiHi
GrepIsAGreatTool
HELLO
HELLOisNOTHello

樣例輸出

HelloWorld
HiHiHelloHiHi
HELLOisNOTHello

樣例說明

  在上面的樣例中,第四個字符串雖然也是Hello,可是大小寫不正確。若是將輸入的第二行改成0,則第四個字符串應該輸出。

評測用例規模與約定

  1<=n<=100,每一個字符串的長度不超過100。

代碼

C++ios

#include <iostream>
#include <cctype>
using namespace std;

int main() {
    string a;
    cin >> a;
    bool casesen;
    cin >> casesen;
    int N;
    cin >> N;
    for(int n=0; n<N; n++) {
        string b;
        cin >> b;
        bool found = false;
        for(int i=0; i<=b.size()-a.size(); i++) {
            int j;
            for(j=0; j<a.size(); j++) {
                if(casesen) {
                    if(a[j]!=b[i+j]) break;
                }
                else {
                    if(tolower(a[j])!=tolower(b[i+j])) break;
                }
            }
            if(j==a.size()) {
                found = true;
                break;
            }
        }
        if(found) cout << b << endl;
    }
}
相關文章
相關標籤/搜索