閱讀每場爲一個字符串,然後轉換成相應的字符串整數。
1)initially
1983
GodFather
3
33
45
are all strings and stored in a vector of strings (vector<string>).
2)Then 1983(1st string is converted to integer using atoi) and last three strings are also converted to integers. Rest of the strings constitute the movie_name
下面的代碼已經假設輸入文件已經過驗證的格式下寫成的。
// open the input file for reading
ifstream ifile(argv[1]);
string input_str;
//Read each line
while(getline(ifile,input_str)) {
stringstream sstr(input_str);
vector<string> strs;
string str;
while(sstr>>str)
strs.push_back(str);
//use the vector of strings to initialize the variables
// year, movie name and last three integers
unsigned int num_of_strs = strs.size();
//first string is year
int year = atoi(strs[0].c_str());
//last three strings are numbers
int one_num = atoi(strs[num_of_strs-3].c_str());
int two_num = atoi(strs[num_of_strs-2].c_str());
int three_num = atoi(strs[num_of_strs-1].c_str());
//rest correspond to movie name
string movie_name("");
//append the strings to form the movie_name
for(unsigned int i=1;i<num_of_strs-4;i++)
movie_name+=(strs[i]+string(" "));
movie_name+=strs[i];
恕我直接改變文件中的分隔符從空間到一些其他字符,或;或:,將顯着簡化解析。 例如,如果以後對數據的規格變化,而僅最近三年,無論是過去三,最後四個可整數,然後上面的代碼將需要大規模的重構。
'的std :: getline'和解析串入部件和/或使用更好的分隔符不是一個空間。 – crashmstr
如果您可以控制文件格式,請使用空格以外的內容作爲分隔符。 ','或'|'可能就足夠了。 –