这一题不知道有没有更好的办法,我的思路是先把输入的一行单词放到一个vector<string>中,然后输出倒数第二个。
把一行字符串以空格为分界符拆分成一组字符串,我利用了stl中的find_first_of函数,这个函数可以从指定的位置开始搜索指定字符,返回第一个找到的位置。通过find_first_of函数循环搜索到每一个空格,然后把单词拆分出来。
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
using namespace std;
void split(const string& s, const string& delim, vector<string> &v) {
if(s.size() == 0) return;
int last = 0;
size_t index = s.find_first_of(delim, last);
while(index != string::npos) {
v.push_back(s.substr(last, index-last));
last = index+1;
index = s.find_first_of(delim, last);
}
if(index - last > 0)
v.push_back(s.substr(last, index-last));
}
int main (int argc, char* argv[])
{
ifstream file;
string lineBuffer;
file.open(argv[1]);
while (!file.eof()) {
getline(file, lineBuffer);
if (lineBuffer.length() == 0)
continue; //ignore all empty lines
else {
vector<string> v;
split(lineBuffer, " ", v);
if(v.size() >= 2)
cout << v[v.size()-2] << endl;
}
}
return 0;
}