1. 程式人生 > >ccf 201409-3 字符串匹配(toupper,tolower)

ccf 201409-3 字符串匹配(toupper,tolower)

cout 分享 type style 串匹配 clu 寫敏感 string 字母

ccf 201409-3 字符串匹配(toupper,tolower)

問題描述   給出一個字符串和多行文字,在這些文字中找到字符串出現的那些行。你的程序還需支持大小寫敏感選項:當選項打開時,表示同一個字母的大寫和小寫看作不同的字符;當選項關閉時,表示同一個字母的大寫和小寫看作相同的字符。 輸入格式   輸入的第一行包含一個字符串S,由大小寫英文字母組成。
  第二行包含一個數字,表示大小寫敏感的選項,當數字為0時表示大小寫不敏感,當數字為1時表示大小寫敏感。
  第三行包含一個整數n,表示給出的文字的行數。
  接下來n行,每行包含一個字符串,字符串由大小寫英文字母組成,不含空格和其他字符。

toupper,tolower
地球人都知道 C++ 的 string 沒有 toupper ,好在這不是個大問題,因為我們有 STL 算法:

string s("heLLo");
transform(s.begin(), s.end(), s.begin(), ::toupper);
cout << s << endl;
transform(s.begin(), s.end(), s.begin(), ::tolower);
cout << s << endl;
transform的頭文件為algorithm

 1 #include<iostream>
 2 #include<cstring>
 3 #include<vector>
 4 #include<stdio.h>
 5 #include<algorithm>
 6 using namespace std;
 7 vector<string> ans;
 8 int main()
 9 {
10     string aim;
11     cin>>aim;
12     int type,n;
13     cin>>type>>n;
14 getchar(); 15 if(type == 1)//大小寫敏感 16 { 17 for(int i=0;i<n;i++) 18 { 19 string str; 20 getline(cin,str); 21 if(str.find(aim) != -1) 22 ans.push_back(str); 23 } 24 } 25 else { 26 transform(aim.begin(),aim.end(),aim.begin(),::tolower);
27 for(int i=0;i<n;i++) 28 { 29 30 string temp; 31 getline(cin,temp); 32 string str = temp; 33 transform(str.begin(),str.end(),str.begin(),::tolower); 34 if(str.find(aim) != -1) 35 ans.push_back(temp); 36 } 37 } 38 for(int i=0;i<ans.size();i++) 39 cout<<ans[i]<<endl; 40 return 0; 41 }

技術分享圖片

ccf 201409-3 字符串匹配(toupper,tolower)