ZOJ - 2971 Give Me the Number 模拟

好吧,首先申明我略微写繁琐了。其实只要先取输入的一行。然后只用从头到尾检查输入即可。

我是把这个输入行拆成3部分,然后分别处理。

 

 

#include <map> #include <cstdio> #include <string> #include <sstream> #include <iostream> using namespace std; map<string, int> mm; char tmp[100]; int pro(string s) { int x = 0; string t; istringstream i(s); if(s.find("hundred") != string::npos) { i >> t; x += 100 * mm[t]; i >> t; //hundred i >> t; //and } if(i >> t) { if(mm[t] >= 20) { x += mm[t]; if(i >> t) { x += mm[t]; } } else { x += mm[t]; } } return x; } int main(int argc, char* argv[]) { int T, ans; string s, mill, thou, hund, w; mm["zero"] = 0; mm["one"] = 1; mm["two"] = 2; mm["three"] = 3; mm["four"] = 4; mm["five"] = 5; mm["six"] = 6; mm["seven"] = 7; mm["eight"] = 8; mm["nine"] = 9; mm["ten"] = 10; mm["eleven"] = 11; mm["twelve"] = 12; mm["thirteen"] = 13; mm["fourteen"] = 14; mm["fifteen"] = 15; mm["sixteen"] = 16; mm["seventeen"] = 17; mm["eighteen"] = 18; mm["nineteen"] = 19; mm["twenty"] = 20; mm["thirty"] = 30; mm["forty"] = 40; mm["fifty"] = 50; mm["sixty"] = 60; mm["seventy"] = 70; mm["eighty"] = 80; mm["ninety"] = 90; scanf("%d", &T); getchar(); while(T--) { ans = 0; gets(tmp); s = tmp; istringstream i(s); mill = ""; if(s.find("million") != string::npos) { i >> w; mill = w; while(i >> w) { if(w.compare("million") == 0) { break; } mill = mill+" "+w; } } ans += pro(mill)*1000000; thou = ""; if(s.find("thousand") != string::npos) { i >> w; thou = w; while(i >> w) { if(w.compare("thousand") == 0) { break; } thou = thou+" "+w; } } ans += pro(thou)*1000; hund = ""; if(i >> w) { hund = w; while(i >> w) { hund = hund+" "+w; } } ans += pro(hund); printf("%d/n", ans); } return 0; }  

 

下面摘自http://www.wangchao.net.cn/bbsdetail_149606.html

 

C++引入了ostringstream、istringstream、stringstream这三个类,要使用他们创建对象就必须包含sstream.h头文件。 
  istringstream类用于执行C++风格的串流的输入操作。 
  stringstream类同时可以支持C++风格的串流的输入输出操作。 
  strstream类同时可以支持C风格的串流的输入输出操作。

 

  构造字符串流的时候,空格会成为字符串参数的内部分界,利用分界获取的方法我们事实上完成了字符串到整型对象与浮点型对象的拆分转换过程。 str()成员函数的使用可以让istringstream对象返回一个string字符串(例如本例中的输出操作(cout<<istr.str();)。

你可能感兴趣的:(ZOJ - 2971 Give Me the Number 模拟)