1.问题描述
输入不超过十个字母的字典词条,每个词条包括一个英文单词、一个空格和fatmouse语言,将输入翻译为英文。
2.思路
看完题后,想的是用两个string数组把输入内容和输出的翻译结果分别写入两个数组,在两数组间用map建立联系,map中的键值和实值分别对应两个string数组,用键值完成对实值的查找。但是,具体如何操作,不会做。只有一个模糊的大体框架,找不出程序的具体写法。比如:如何结束输入,具体怎样建立词条。
在百度搜索的代码,通过读代码大体了解整体的构思和细节处理。
#include<iostream>
#include<fstream>
#include<string>
#include<map>
using namespace std;
int main()
{
string s;
char ss[100],s1[100],s2[100];
map<string,string>m;
map<string,string>::iterator p;
while(gets(ss))
{
s=ss;
if(s=="") break; //结束循环的条件
else
{
sscanf(s.c_str(),"%s %s",s1,s2); //默认以空格键分隔字符
m[s2]=s1;
} //输入建立字典
}
while(gets(ss))
{
s=ss;
p=m.find(s);
if(p!=m.end())
cout<<m[s]<<endl;
else
cout<<"eh"<<endl;
} //利用map的查找函数输出翻译后的单词
return 0;
}
利用sscanf直接输入字典词条,也可以设两个数组,以空格键为间隔,分别输入,然后查找。分别输入的方法个人认为比较容易理解,适合现在我简单的思维方式。
3.体会
基础太差,看答案之前思路很模糊,几乎没有。废了半天的劲把答案看懂了,把一个写程序的题做成了读程序的题。
但也有收获,补充知识:map的具体应用,输入输出用法(gets,getline,scanf,sscanf)
最后提交了好几遍显示编译错误,仔细一看是选成了c,简直被自己蠢哭。