zoukankan      html  css  js  c++  java
  • pat1022__字符串查找

    主要是对字符串的查找,为了方便并且快速的实现查找,用map会比较方便

    同时如何把一个带有空格的字符串变成多个单词也有一个小技巧

    char *point=book[i].keyWord;//关键词分离
                while(*point){
        sscanf(point,"%s",str);
        point+=strlen(str)+1;
        string stemp(str);
        mm_keyWord[stemp].push_back(i);
    }
    #include<stdio.h>
    #include<iostream>
    #include<queue>
    #include<map>
    #include<vector>
    #include<string>
    #include<algorithm>
    #include<string.h>
    #include<algorithm>
    using namespace std;
    
    struct BOOK{
        char ID[9];
        char bname[89];
        char rname[89];
        char keyWord[89];
        char publisher[89];
        char year[6];
    }book[10099];
    
    
    int cmp(BOOK x,BOOK y){
        return strcmp(x.ID,y.ID)<0;
    }
    
    int main(){
        int n,m;
        while(scanf("%d",&n)!=EOF){
            int i;
            map<string,vector<int>>mm_bname;
            map<string,vector<int>>mm_rname;
            map<string,vector<int>>mm_keyWord;
            map<string,vector<int>>mm_publisher;
            map<string,vector<int>>mm_year;
    
            for(i=1;i<=n;i++){
                scanf("%s",book[i].ID);getchar();
                gets(book[i].bname);
                gets(book[i].rname);
                gets(book[i].keyWord);
                gets(book[i].publisher);
                scanf("%s",&book[i].year);
            }
            sort(&book[1],&book[1+n],cmp);
            //key word
            char str[19];
            for(i=1;i<=n;i++){
                string s2(book[i].bname);
                mm_bname[s2].push_back(i);
                string s3(book[i].rname);
                mm_rname[s3].push_back(i);
                string s4(book[i].publisher);
                mm_publisher[s4].push_back(i);
                string s5(book[i].year);
                mm_year[s5].push_back(i);
    
                char *point=book[i].keyWord;//关键词分离
                while(*point){
                    sscanf(point,"%s",str);
                    point+=strlen(str)+1;
                    string stemp(str);
                    mm_keyWord[stemp].push_back(i);
                }
            }
    
            int num,j;
            scanf("%d",&m);
            for(i=1;i<=m;i++){
                scanf("%d: ",&num);
                gets(str);
                string s1(str);
                printf("%d: %s
    ",num,str);
                if(num==1){
                    for(j=0;j<mm_bname[s1].size();j++){
                        printf("%s
    ",book[mm_bname[s1][j]].ID);
                    }
                }
                if(num==2){
                    for(j=0;j<mm_rname[s1].size();j++){
                        printf("%s
    ",book[mm_rname[s1][j]].ID);
                    }
                }
                if(num==3){
                    for(j=0;j<mm_keyWord[s1].size();j++){
                        printf("%s
    ",book[mm_keyWord[s1][j]].ID);
                    }
                }
                if(num==4){
                    for(j=0;j<mm_publisher[s1].size();j++){
                        printf("%s
    ",book[mm_publisher[s1][j]].ID);
                    }
                }
                if(num==5){
                    for(j=0;j<mm_year[s1].size();j++){
                        printf("%s
    ",book[mm_year[s1][j]].ID);
                    }
                }
                if(j==0){
                    printf("Not Found
    ");
                }
            }
        }
    
        return 0;
    }
    View Code
  • 相关阅读:
    Heterogeneity Wins
    Android使用ImageView显示网络图片
    Android OOM的解决方式
    洛谷P3390 【模板】矩阵快速幂
    CF732D. Exams[二分答案 贪心]
    洛谷P3388 【模板】割点
    POJ2942 Knights of the Round Table[点双连通分量|二分图染色|补图]
    NOI2001|POJ1182食物链[种类并查集 向量]
    HDU3038 How Many Answers Are Wrong[带权并查集]
    NOIP2010关押罪犯[并查集|二分答案+二分图染色 | 种类并查集]
  • 原文地址:https://www.cnblogs.com/huhuuu/p/3369141.html
Copyright © 2011-2022 走看看