pat1022__字符串查找
主要是对字符串的查找,为了方便并且快速的实现查找,用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__字符串查找的更多相关文章
- Rabin-Karp指纹字符串查找算法
首先计算模式字符串的散列函数, 如果找到一个和模式字符串散列值相同的子字符串, 那么继续验证两者是否匹配. 这个过程等价于将模式保存在一个散列表中, 然后在文本中的所有子字符串查找. 但不需要为散列表 ...
- 自己动手写文件查找,字符串查找,查询jar包等工具
文件查找——搜索当前目录下的文件 知道大概的文件名称,使用 findf FileName findf.py import argparse, re, os from os.path import jo ...
- 关于字符串查找 charindex ,Patindex 还有一个like
字符串查找.在模糊朝找的情况下,其实3者的效率是差不多的.都需要一个一个取出来然后扫一遍╮(╯_╰)╭.然而用法还是会有一点儿的区别 1 charindex (查找的字符串,字符串表达式[,开始查找的 ...
- python 字符串查找
python 字符串查找有4个方法,1 find,2 index方法,3 rfind方法,4 rindex方法. 1 find()方法: )##从下标1开始,查找在字符串里第一个出现的子串:返回结果3 ...
- Sunday算法(字符串查找、匹配)
字符串查找算法中,最著名的两个是KMP算法(Knuth-Morris-Pratt)和BM算法(Boyer-Moore).两个算法在最坏情况下均具有线性的查找时间.但是在实用上,KMP算法并不比最简单的 ...
- lintcode:strStr 字符串查找
题目: 字符串查找 字符串查找(又称查找子字符串),是字符串操作中一个很有用的函数.你的任务是实现这个函数. 对于一个给定的 source 字符串和一个 target 字符串,你应该在 source ...
- Rabin-Karp字符串查找算法
1.简介 暴力字符串匹配(brute force string matching)是子串匹配算法中最基本的一种,它确实有自己的优点,比如它并不需要对文本(text)或模式串(pattern)进行预处理 ...
- php中常用的字符串查找函数strstr()、strpos()实例解释
string strstr ( string $haystack , mixed $needle [, bool $before_needle = false ] ) 1.$haystack被查找的字 ...
- 数据结构与算法--Boyer-Moore和Rabin-Karp子字符串查找
数据结构与算法--Boyer-Moore和Rabin-Karp子字符串查找 Boyer-Moore字符串查找算法 注意,<算法4>上将这个版本的实现称为Broyer-Moore算法,我看了 ...
随机推荐
- .Net使用Redis详解之ServiceStack.Redis(7)
Net使用Redis详解之ServiceStack.Redis(七) 序言 本篇从.Net如何接入Reis开始,直至.Net对Redis的各种操作,为了方便学习与做为文档的查看,我做一遍注释展现,其中 ...
- hdu1569
题解: 网络流 最大权独立集=总和-最大流 然后构图 代码: #include<cstdio> #include<cmath> #include<cstring> ...
- 通过Fegin远程调用 ,返回JPA Page 对象报错
Caused by: com.fasterxml.jackson.databind.JsonMappingException: Can not construct instance of org.sp ...
- SpringInAction--Bean自动装配的歧义性处理
在前面,学习如何装配Bean的时候,或许会发现,有的同类型的Bean智能配置一个 如下: package com.bean.java; import org.springframework.conte ...
- vue.js 源代码学习笔记 ----- core array.js
/* * not type checking this file because flow doesn't play well with * dynamically accessing methods ...
- jQuery选项卡wdScrollTab
实例Demo 运行一下 参数说明 Config active Number Active tab index. Base on 0. autoResizable Boolean Whether ...
- java中遍历类中的属性、调用getter&setter方法
public static void testReflect(Object model) throws NoSuchMethodException, IllegalAccessException, I ...
- Shell 循环中实现展示进度百分比的脚本方法
Shell 循环中实现展示进度百分比的脚本方法 当我需要处理一个几万行的文件的时候,需要处理的时间是比较长的.我一开始的想法是,没处理一行,就输出一个 # 号.但是这样还是会出现很多很多的 # 号,即 ...
- CUDA Samples: Ray Tracking
以下CUDA sample是分别用C++和CUDA实现的生成光线跟踪图像,并对其中使用到的CUDA函数进行了解说,code参考了<GPU高性能编程CUDA实战>一书的第六章,CUDA各实现 ...
- CUDA Samples: Long Vector Add
以下CUDA sample是分别用C++和CUDA实现的两个非常大的向量相加操作,并对其中使用到的CUDA函数进行了解说,各个文件内容如下: common.hpp: #ifndef FBC_CUDA_ ...