2016-03-14 249 views
1
#include <iostream> 
#include <fstream> 
#include <string> 
#include <vector> 
#include <algorithm> 

void reverse_words(const std::string &file) { 
    std::ifstream inFile { file }; 
    std::vector<std::string> lines; 
    if(static_cast<bool>(inFile)) { 
     std::string line; 
     while(std::getline(inFile, line, '\n')) { 
       lines.push_back(line); 
     } 

    std::vector<std::string> reverse_line; 
    std::string word; 
    for(auto line: lines) { 
     while(std::getline(line, word, ' ')) 
      reverse_line.push_back(word); 

    } 

    } 
} 

int main(int argc, char ** argv) { 
    if(argc == 2) { 
     reverse_words(argv[1]); 
    } 
} 

在我的程序的最後一個for循環中,我想從一行中讀取一個單詞,該行是一個字符串,因此它與getline()函數定義不匹配。我怎樣才能將該行轉換爲字符串流,以便我可以像讀取文件一樣使用它?將字符串對象轉換爲istringstream

請忽略此刻程序的邏輯,它不完整,我的問題是C++特定的。

+0

旁註:你不需要'如果(的static_cast (INFILE))',用'如果(INFILE)' –

+0

你不」不得不寫'if(static_cast (inFile)){'。 'InFile'可以上下文轉換爲'bool',所以你可以直接寫'if(inFile){' – Barry

+0

@DieterLücking哈哈,10秒 – Barry

回答

2

你只需要構建一個istringstream

for(auto const& line: lines) { 
    std::istringstream iss{line}; // <------- 
    while(std::getline(iss, word, ' ')) { 
     reverse_line.push_back(word); 
    } 
}  
0
std::string s("hello world"); 
std::istringstream ss(s); 
std::string s1, s2; 
ss >> s1 >> s2; 
std::cout << s1 << std::endl; 
std::cout << s2 << std::endl;