【问题标题】:Cast string object to istringstream将字符串对象转换为 istringstream
【发布时间】: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&lt;bool&gt;(inFile)),使用if(inFile)
  • 你不必写if (static_cast&lt;bool&gt;(inFile)) {InFile 可根据上下文转换为 bool,因此您只需编写 if (inFile) {
  • @DieterLücking 哈哈,10 秒
  • 过于方便(强制转换)会破坏编程!
  • 补充说明:您不需要if(static_cast&lt;bool&gt;(inFile))if(inFile)。如果文件未打开,对getline 的调用将失败,lines 将为空。

标签: c++ string stringstream istringstream


【解决方案1】:
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;

【讨论】:

    【解决方案2】:

    你只需要构造一个istringstream

    for(auto const& line: lines) {
        std::istringstream iss{line};  // <-------
        while(std::getline(iss, word, ' ')) {
            reverse_line.push_back(word);
        }
    }    
    

    【讨论】:

      猜你喜欢
      • 2013-03-29
      • 2014-01-14
      • 2011-08-02
      • 2016-06-10
      相关资源
      最近更新 更多