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

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

char *point=book[i].keyWord;//关键词分离
while(*point){
sscanf(point,"%s",str);
point+=strlen(str)+;
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[];
char bname[];
char rname[];
char keyWord[];
char publisher[];
char year[];
}book[]; int cmp(BOOK x,BOOK y){
return strcmp(x.ID,y.ID)<;
} 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=;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[],&book[+n],cmp);
//key word
char str[];
for(i=;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)+;
string stemp(str);
mm_keyWord[stemp].push_back(i);
}
} int num,j;
scanf("%d",&m);
for(i=;i<=m;i++){
scanf("%d: ",&num);
gets(str);
string s1(str);
printf("%d: %s\n",num,str);
if(num==){
for(j=;j<mm_bname[s1].size();j++){
printf("%s\n",book[mm_bname[s1][j]].ID);
}
}
if(num==){
for(j=;j<mm_rname[s1].size();j++){
printf("%s\n",book[mm_rname[s1][j]].ID);
}
}
if(num==){
for(j=;j<mm_keyWord[s1].size();j++){
printf("%s\n",book[mm_keyWord[s1][j]].ID);
}
}
if(num==){
for(j=;j<mm_publisher[s1].size();j++){
printf("%s\n",book[mm_publisher[s1][j]].ID);
}
}
if(num==){
for(j=;j<mm_year[s1].size();j++){
printf("%s\n",book[mm_year[s1][j]].ID);
}
}
if(j==){
printf("Not Found\n");
}
}
} return ;
}

pat1022__字符串查找的更多相关文章

  1. Rabin-Karp指纹字符串查找算法

    首先计算模式字符串的散列函数, 如果找到一个和模式字符串散列值相同的子字符串, 那么继续验证两者是否匹配. 这个过程等价于将模式保存在一个散列表中, 然后在文本中的所有子字符串查找. 但不需要为散列表 ...

  2. 自己动手写文件查找,字符串查找,查询jar包等工具

    文件查找——搜索当前目录下的文件 知道大概的文件名称,使用 findf FileName findf.py import argparse, re, os from os.path import jo ...

  3. 关于字符串查找 charindex ,Patindex 还有一个like

    字符串查找.在模糊朝找的情况下,其实3者的效率是差不多的.都需要一个一个取出来然后扫一遍╮(╯_╰)╭.然而用法还是会有一点儿的区别 1 charindex (查找的字符串,字符串表达式[,开始查找的 ...

  4. python 字符串查找

    python 字符串查找有4个方法,1 find,2 index方法,3 rfind方法,4 rindex方法. 1 find()方法: )##从下标1开始,查找在字符串里第一个出现的子串:返回结果3 ...

  5. Sunday算法(字符串查找、匹配)

    字符串查找算法中,最著名的两个是KMP算法(Knuth-Morris-Pratt)和BM算法(Boyer-Moore).两个算法在最坏情况下均具有线性的查找时间.但是在实用上,KMP算法并不比最简单的 ...

  6. lintcode:strStr 字符串查找

    题目: 字符串查找 字符串查找(又称查找子字符串),是字符串操作中一个很有用的函数.你的任务是实现这个函数. 对于一个给定的 source 字符串和一个 target 字符串,你应该在 source ...

  7. Rabin-Karp字符串查找算法

    1.简介 暴力字符串匹配(brute force string matching)是子串匹配算法中最基本的一种,它确实有自己的优点,比如它并不需要对文本(text)或模式串(pattern)进行预处理 ...

  8. php中常用的字符串查找函数strstr()、strpos()实例解释

    string strstr ( string $haystack , mixed $needle [, bool $before_needle = false ] ) 1.$haystack被查找的字 ...

  9. 数据结构与算法--Boyer-Moore和Rabin-Karp子字符串查找

    数据结构与算法--Boyer-Moore和Rabin-Karp子字符串查找 Boyer-Moore字符串查找算法 注意,<算法4>上将这个版本的实现称为Broyer-Moore算法,我看了 ...

随机推荐

  1. DNSmasq搭建DNS服务器

    原文地址:http://jirry.me/2016/04/19/dnsmasq-on-aliyun/ DNSmasq 是一个小巧且方便地用于配置 DNS 和 DHCP 的工具,适用于小型网络,它提供了 ...

  2. 项目提交到github的忽略文件

    1.在工作区的.gitignore文件中配置如下: # Built application files*.apk*.ap_ # Files for the Dalvik VM*.dex # Java ...

  3. vue的v-model绑定数据问题

    在我的项目中有一个这样的功能模块: 我们修改数据全是在前台的table中修改,然后把这个table的值带到后台.(理想:修改值后,点击确认值改变,点击取消值恢复原来的值)那么问题就来了: a)你修改值 ...

  4. 一台服务器的IIS绑定多个域名

    等待十分钟: 在IIS上配置:

  5. SQL SERVER - set statistics time on的理解

    一.set statistics time on的作用 显示分析.编译和执行各语句所需的毫秒数. 二.语法 SET STATISTICS TIME { ON | OFF } 注释 1.当 SET ST ...

  6. 使用DaoCloud持续构建docker镜像,自动化部署

    我们学会了在主机上安装部署docker,也学会了构建自己的docker镜像和容器,启停也都会用了,下一步就需要持续构建发布docker的技能了. 我们希望能在代码提交后,有个远程服务能自动开始构建项目 ...

  7. java.io.IOException: Unable to establish loopback connection

    1.错误描述 Starting preview server on port 8080 Modules: HTML5 (/HTML5) 2017-06-17 11:13:04.823:INFO::ma ...

  8. MPAndroidChart Wiki(译文)~Part 5

    19. ChartData子类 这篇wiki主要关注ChartData子类的具体介绍.至于此部分没有提及到的ChartData的子类,代表他们没有特性功能需要介绍. BarData 方法 使用 set ...

  9. python删除list中元素的三种方法

    a.pop(index):删除列表a中index处的值,并且返回这个值. del(a[index]):删除列表a中index处的值,无返回值. del中的index可以是切片,所以可以实现批量删除. ...

  10. python中继承和多态

    继承和多态 继承 引入继承 我们有这样一个需求 模仿英雄联盟定义两个英雄类 1.英雄要有昵称.攻击力.生命值属性 2.实例化出两个英雄对象 3.英雄之间可以互殴,被殴打的一方掉血,血量小于0则判断为死 ...