Description
Input
Output
Sample Input
dog ogday cat atcay pig igpay froot ootfray loops oopslay atcay ittenkay oopslay
Sample Output
cat eh loops
sscanf使用时sscanf(ch,"%s%s",str[n].a,str[n].b); ch为要读进去的字符串 “%s%s”为要需要读入字符串的标志,str[n].a,str[n].b要读入字符的变量
其中是默认的遇到空格之后的就读到str[n].b里面的
其余的就是思路比较简单的,就是用到几个函数了。。。
#include<iostream> #include<cstring> #include <string> #include <algorithm> using namespace std; struct aa { char a[20]; char b[20]; }str[100005]; bool cmp(aa x,aa y)///////配合sort函数使用---比较函数 { if(strcmp(x.b,y.b)<0) return 1; return 0; } bool isblank (char ch[])//查找是否到了结束条件 { if(ch[0]=='\0') return 1; return 0; } int find(char ch[],int n)//二分法(可直接调用) { int l,r; l=0; r=n; int mid=0; while(l+1<r) { mid=(l+r)/2; if(strcmp(str[mid].b,ch)<=0) l=mid; else r=mid; }; return l; } int main() { int n=0,i; char ch[50]; cin.getline(ch,50); while(!isblank(ch)) { sscanf(ch,"%s%s",str[n].a,str[n].b); n++; cin.getline(ch,50); } sort(str,str+n,cmp); ////////使用sort结构体排序 cin.getline(ch,50); while(!isblank(ch)) { int l=find(ch,n); cout<<(strcmp(str[l].b,ch)==0?str[l].a:"eh")<<endl; cin.getline(ch,50); } return 0; }