【发布时间】:2016-11-01 02:21:24
【问题描述】:
如果我有stdin 输入如下:
2014-01-23, AA, 20
2014-05-30, BB,2 //notice that I might have optional space
2015-03-24, CC, 5
//...
//... and so on
如何用 C++ 编写一个程序来有效地解析 month 和 year 以及后续字段?我真的被这个解析问题困住了。
我想对后续字段执行的操作将AA, 20 存储为地图。所以map[AA]=20等等。
我可以自己做。但我不知道如何阅读和解析它。 请帮忙。
尝试:
int year, month;
int num;
string key;
map<string, int> mapping;
string s;
getline(cin,s, '-');
year=stoi(s);
getline(cin,s, '-');
month=stoi(s);
getline(cin,s, ',');
//reading the AA, BB, CC field;
getline(cin,s, ',');
for (int i=0; i<s.size(); i++);
if (s[i]==' ') s.erase(i,1);
key=s;
//now, reading the number field following AA,BB, CC
getline(cin,s,'\n');
for (int i=0; i<s.size(); i++);
if (s[i]==' ') s.erase(i,1);
num=stoi(s);
mapping[key]=num;
【问题讨论】:
-
你需要一步一步来。首先,编写一个程序,读取每一行文本,一次一行。第二步:将每一行文本解析为单独的字段。第三步:将第一个字段解析为它的组成部分,年、月和日。问题解决了。看看这有多容易?
-
是的,这很容易。但是我的代码有点长。
-
有一句古老的 Vulcan 谚语:代码越长,越有可能出现错误。
-
只是需要帮助才能弄清楚