【发布时间】:2016-06-30 02:07:13
【问题描述】:
#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() 函数定义不匹配。如何将行转换为字符串流,以便可以像文件一样使用它来读取?
目前请忽略程序的逻辑,它不完整,我的问题是C++特有的。
【问题讨论】:
-
旁注:你不需要
if(static_cast<bool>(inFile)),使用if(inFile) -
你不必写
if (static_cast<bool>(inFile)) {。InFile可根据上下文转换为bool,因此您只需编写if (inFile) { -
@DieterLücking 哈哈,10 秒
-
过于方便(强制转换)会破坏编程!
-
补充说明:您不需要
if(static_cast<bool>(inFile))或if(inFile)。如果文件未打开,对getline的调用将失败,lines将为空。
标签: c++ string stringstream istringstream