#include <iostream>
#include <cstdio>
#include <cstring>
#include <stdlib.h>
using namespace std;
int cmp_string(const void *_a, const void *_b)
{
return strcmp((char*)_a, (char*)_b);
}
int main() {
char word[55][15];
char title[210][400], str[210][20][20], key[3000][20], key_1[3000][20];
int arr[210][20] = {0};
memset(str, 0, sizeof(str));
//输入数据
int n = 0;
while (gets(word[n])) {
if (word[n][0] == ':' && word[n][1] == ':')
break;
n++;
}
int m = 0;
while (gets(title[m])) {
m++;
}
//title 转化为小写
for (int i = 0; i < m; i++)
for (int j = 0; j < strlen(title[i]); j++)
if (title[i][j] >= 'A' && title[i][j] <= 'Z')
title[i][j] += 32;
//切割出单词
for (int i = 0; i < m; i++) {
int x = 0, y = 0;
bool kong = false;
for (int j = 0; j < strlen(title[i]); j++)
if (title[i][j] >= 'a' && title[i][j] <= 'z')
str[i][x][y++] = title[i][j], kong = true;
else if (title[i][j] == ' ' && title[i][j+1] != ' ' && kong) {
str[i][x][y] = 0;
y = 0;
x++;
kong = !kong;
}
str[i][19][0] = x+1; //str[i][19][0] 记录每行的单词个数
}
//找出关键字
int l = 0;
for (int i = 0; i < m; i++) {
for (int k = 0; k < str[i][19][0]; k++)
for (int j = 0; j < n; j++)
if (strcmp(str[i][k], word[j]) == 0)
arr[i][k] = 1;
for (int k = 0; k < str[i][19][0]; k++)
if (!arr[i][k])
strcpy(key[l++], str[i][k]);
}
//关键字排序
qsort(key, l, sizeof(key[0]), cmp_string);
//去除重复的关键字
int r = 0;
for (int i = 0; i < l; i++)
if (strcmp(key[i], key[i+1]))
strcpy(key_1[r++], key[i]);
//按关键字的字典顺序输出
for (int j = 0; j < r; j++)
for (int i = 0; i < m; i++) {
bool bo = false;
for (int k = 0; k < str[i][19][0]; k++)
if (!arr[i][k] && !strcmp(key_1[j], str[i][k])) {
if (bo)
break;
char title_1[200];
strcpy(title_1, title[i]);
for (int t = 0; t < strlen(title[i]); t++) {
int w = t;
int u = 0;
while (title[i][w] == key_1[j][u]) {
if (title[i][w] == '\0')
break;
w++;
u++;
// if (u == strlen(key_1[j]) && )
// break;
}
if (u == strlen(key_1[j]) && t != w && (title[i][w] == ' ' && title[i][t-1] == ' ' || t == 0 && title[i][w] == ' ' || w == strlen(title[i]) && title[i][t-1] == ' ' || t == 0 && w == strlen(title[i]))) {
// printf("key_1[j] = %s, u = %d, t = %d, w = %d \n", key_1[j], u, t, w);
while (u > 0) {
title_1[t++] -= 32;
u--;
}
puts(title_1);
strcpy(title_1, title[i]);
bo = true;
}
}
}
}
return 0;
}
UVA 123 (暑假-排序、检索(2)-B-Searching Quickly)
最新推荐文章于 2016-05-14 21:26:00 发布