ACM程序设计 -B 2题 (字典查找)

    xiaoxiao2021-03-25  167

    描述:写字典 英文+空格+词语,然后输入,输入最多不超过100002个 单词 ,最后一个回车,输入词语,输出词语的英语。 刚开始看到题,寻思用 string 输入,用两个string变量数组 把空格 两边的单词分别写入 两个数组中,但是,没有想到如何结束第一个while语句,第二个while,cin(string),然后从 第二个数组中寻找 是否有 输入的string变量,如果有从第一个string数组中输出。 Code: #if    0                    //my #include<bits/stdc++.h> using namespace std; int main() {  string a,ai[100],bi[100],aii;  int ii,n,i=0;    while(getline(cin,a))  {   if(a=="") break;   n=a.size();   ii=a.find(" ");   ai[i]=a.substr(0,ii);   bi[i]=a.substr(ii+1,n-ii);  i++;    } while(getline(cin,aii)) { int ni=0;  for(int i=0;i<100;i++)  {   if(bi[i]==aii)   {   cout<<ai[i]<<endl;ni=1;break;      }     ;  }  if(ni==0)       cout<<"eh"<<endl;    } } #endif 这里面的 if(a=="") break; 结束while(),是借鉴百度上的代码,有木有,有木有,然后运行发现用时超长,看了一下的代码,发现用map的效率会更高,尤其面对数据超多的时候,有木有。 #if  0             // 2题   百度 #include<iostream> #include<map> #include<string> #include<cstring> #include<cstdio> using namespace std; int main() {    map<string,string>a ;    char s[30],s1[12],s2[12];    int n,i;    while(gets(s))    {      if(strcmp(s,"")==0) break;      else       {         n=strlen(s);               for(i=0;i<n;i++)         {          if(s[i]==' ')break;      }    }      strncpy(s1,s,i);      s1[i]='\0';       strncpy(s2,s+i+1,n-i);          s2[n-i]='\0';          a[s2]=s1;       }    while(cin>>s2)   {    if(a[s2]=="")    cout<<"eh"<<endl;    else cout<<a[s2]<<endl;   }     }   #endif 发现了用map 然后自己写了一个: //2. #if  0                     //my #include<bits/stdc++.h> using namespace std; int main() {  map<string,string>m;  string a,ai,bi;  int ii,n;    while(getline(cin,a))  {   if(a=="") break;   n=a.size();   ii=a.find(" ");   ai=a.substr(0,ii);   bi=a.substr(ii+1,n-ii);   m[bi]=ai;    } while(getline(cin,ai)) {  if(m.count(ai))  cout<<m[ai]<<endl;  else cout<<"eh"<<endl;   } } #endif
    转载请注明原文地址: https://ju.6miu.com/read-4982.html

    最新回复(0)