• zoj 1315 Excuses, Excuses!


    题目地址:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1315

    题解 :   1  一个很简单的题 没有什么算法在里面,完全考输入输出,基本功  。

                 2  很奇怪  每个案例后面总是输出一个空行,和一般的要求不一样 

                 3 每次在调用cin.getline() 时 先用调用一次,吃掉前面cin没有管的回车换行符

                 4 判断某一个关键词在不在这个借口中时,将这个关键词一步步的移动,逐一去匹配,还要注意的是,即便匹配成功,这个关键词前面和后面不可以有字母,所以还要对匹配成功的地址进行特判。

    #include<iostream>
    #include<string>
    #include<cstdio>
    #include<cstring>
    #include<fstream>
    using namespace std;
    
    string tolowercase(string s)
    {
    
       int size=s.length();
       for(int i=0;i<size;i++)
         if(s[i]>='A'&&s[i]<='Z')   s[i]=s[i]+32;
    
       return  s;
    }
    int main()
    {
      //ifstream cin("testdata.txt");
        int k,e;
        int tag=0;
    //    bool first=true;
        while(cin>>k>>e)
        {
           tag++;
    //
    //      if(first==false)  cout<<endl;
    //      if(first==true)  first=false;
    
          string  * key=new string[k];
          for(int i=0;i<k;i++)
            cin>>key[i];
    
    
          string * excuse=new string[e];
    
          string * oriexcuse=new string[e];
    
          int *keynum=new  int [e];
    
          for(int i=0;i<e;i++)
              keynum[i]=0;
    
          char tempstring[75];
    
           //getchar();     // 吸收一个回车
            cin.getline(tempstring,75);
          for(int i=0;i<e;i++)
            {
              cin.getline(tempstring,75);
              oriexcuse[i]=tempstring;
              excuse[i]=tempstring;
              excuse[i]=tolowercase(excuse[i]);     //完成小写化
    
            }
    
    
         for(int j=0;j<e;j++)    //  对第j条借口 统计 出现了几个key
         {
            string curexcuse=excuse[j];
    
    
            int count=0;
           for(int i=0;i<k;i++)
            {
                string keyword=key[i];
                int size=keyword.length();
    
                for(int k=0;k+size-1<curexcuse.length();k++)
                {
                     string subexcuse=curexcuse.substr(k,size);
                     if(subexcuse==keyword)
                     {
                          if(k==0)
                          {
                             char ch=curexcuse[k+size];
    
                             if(ch<'a'||ch>'z')   count++;
                          }
                          else if(k==curexcuse.length()-size)
                          {
                              char ch=curexcuse[k-1];
    
                             if(ch<'a'||ch>'z')   count++;
    
                          }
    
                          else
                          {
    
                             char ch=curexcuse[k-1];
    
                             char ch2=curexcuse[k+size];
                             if((ch<'a'||ch>'z')&& (ch2<'a'||ch2>'z'))  count++;
    
    
                          }
    
                     }
                }
    
            }
    
    
           keynum[j]=count;
    
         }
    
    
    
    
           int maxnum=keynum[0];
          for(int i=0;i<e;i++)
             if(keynum[i]>maxnum)  maxnum=keynum[i];
    
    
    
           cout<<"Excuse Set #"<<tag<<endl;
           for(int i=0;i<e;i++)
             if(keynum[i]==maxnum)  cout<<oriexcuse[i]<<endl;
    
         cout<<endl;
        }
    }
    


  • 相关阅读:
    TimeSpan的操作
    List<T>的排序和筛选
    编程中的一些概念
    SVN返回版本
    语音播报
    优化编译器的局限性
    Inline Functions 与它的形式参数和局部变量
    函数的效能 & 指向 Member Functions 的指针与其效能
    虚拟继承下 Virtual Function 的语意
    多重继承下 Virtual Function 的语意
  • 原文地址:https://www.cnblogs.com/814jingqi/p/3247201.html
Copyright © 2020-2023  润新知