解析:
先对字符串进行排序,再使用二分查找法即可。
代码:
#include<iostream>
#include <algorithm>
#include<cstdio>
#include<string>
#include<Windows.h>
#include<cstring>
#define MAXN 10010
using namespace std;
struct node
{
char a[12];
char b[12];
}dat[MAXN];
int pos;
char str[24];
int main()
{
int en, st, mid;
char val[24];
pos = 0;
while (gets_s(str))
{
if (str[0] == '\0') break;
sscanf(str,"%s%s", dat[pos].a, dat[pos].b); //从空格处拆分成两个字符串
pos++;
}
cin >> val;
st = 0;
en = pos - 1;
sort(str,str+pos);
while (st <= en)
{
mid = (st + en) >> 1;
if (strcmp(dat[mid].b, val) == 0) {
cout << dat[mid].a << endl;
system("pause");
return 0;
}
else if (strcmp(dat[mid].b, val) < 0)
en = mid - 1;
else st = mid + 1;
}
cout << "not found!" << endl;
system("pause");
return 0;
}