zoukankan      html  css  js  c++  java
  • CCF-201409-3 字符串匹配

     

    试题编号: 201409-3
    试题名称: 字符串匹配
    时间限制: 1.0s
    内存限制: 256.0MB
    问题描述:
    问题描述
      给出一个字符串和多行文字,在这些文字中找到字符串出现的那些行。你的程序还需支持大小写敏感选项:当选项打开时,表示同一个字母的大写和小写看作不同的字符;当选项关闭时,表示同一个字母的大写和小写看作相同的字符。
    输入格式
      输入的第一行包含一个字符串S,由大小写英文字母组成。
      第二行包含一个数字,表示大小写敏感的选项,当数字为0时表示大小写不敏感,当数字为1时表示大小写敏感。
      第三行包含一个整数n,表示给出的文字的行数。
      接下来n行,每行包含一个字符串,字符串由大小写英文字母组成,不含空格和其他字符。
    输出格式
      输出多行,每行包含一个字符串,按出现的顺序依次给出那些包含了字符串S的行。
    样例输入
    Hello
    1
    5
    HelloWorld
    HiHiHelloHiHi
    GrepIsAGreatTool
    HELLO
    HELLOisNOTHello
    样例输出
    HelloWorld
    HiHiHelloHiHi
    HELLOisNOTHello
    样例说明
      在上面的样例中,第四个字符串虽然也是Hello,但是大小写不正确。如果将输入的第二行改为0,则第四个字符串应该输出。
    评测用例规模与约定
      1<=n<=100,每个字符串的长度不超过100。


      思路:

      对于操作是0,则不敏感,这里我们用string  transform 方法,将str 和key 都转换成小写,这样,无论大小写,都能进行匹配,成功则输出str;
      对于输入的字符串,假设操作是1,则大小写敏感,直接对string 进行find查找,查找不到会输出 string :: npos ,若找到直接输出str;
    思路:

     1 #include <iostream>
     2 #include <algorithm>
     3 
     4 using namespace std;
     5 
     6 void run(string str,string key,int op){
     7     string locstr=str;
     8     if(op==0){
     9         transform(str.begin(),str.end(),locstr.begin(),::tolower);
    10         transform(key.begin(),key.end(),key.begin(),::tolower);
    11     }
    12     
    13     if(locstr.find(key)!=string::npos){
    14         cout<<str<<endl;
    15     }
    16 }
    17 
    18 int main(void){
    19     string key,str;
    20     int op,N;
    21     cin>>key;
    22     cin>>op;;
    23     cin>>N;
    24     
    25     for(int i=0;i<N;i++){
    26         cin>>str;
    27         run(str,key,op);
    28     }
    29     
    30     return 0;
    31 }

     

    补:关于大小写

    1.string大小写转换

    #include <string>  
    #include <algorithm> 
    transform(str.begin(), str.end(), str.begin(), (int (*)(int))tolower);//转小写
    //transform(str.begin(), str.end(), str.begin(), ::tolower);//转小写两种方式都可以
    transform(str.begin(), str.end(), str.begin(), (int (*)(int))toupper);//转大写

    2.char大小写

    #include <iostream>  
    #include <string>  
    #include <string.h> 
    for (char* ptr = the_str; *ptr; ptr++) {  
        *ptr = tolower(*ptr);  //转小写
        //*ptr = toupper(*ptr);  //转大写
      }  

    3.char * 大小写转换

     1 #include <string>  
     2 #include <algorithm> 
     3 char *tok;
     4 string str=posParse;
     5 const int len = str.length();
     6 tok = new char[len+1];
     7 transform(str.begin(), str.end(), str.begin(), (int (*)(int))tolower);//转小写
     8 //transform(str.begin(), str.end(), str.begin(), ::tolower);//转小写两种方式都可以
     9 transform(str.begin(), str.end(), str.begin(), (int (*)(int))toupper);//转大写
    10 strcpy(tok,str.c_str());
    雄关不惧 成败自含香
  • 相关阅读:
    谈谈Oracle基本操作(下)
    谈谈Oracle基本操作(上)
    java理论之java多线程与网络编程
    java理论之java--GUI(图形用户管理)与 IO/流
    java理论之java数组和集合
    存图片的
    .html()渲染后的内容还是带标签的字符串的问题
    Vuejs报错error: Unexpected console statement (no-console) at src... 解决办法
    常用正则表达式
    移动WEB---01.关于屏幕像素
  • 原文地址:https://www.cnblogs.com/cswangchen/p/7530548.html
Copyright © 2011-2022 走看看