C++ istringstream 基于范围的 for 循环没有开始成员

字符

我正在尝试制作一个基本的 REPL 来解析用户输入的特殊字符。这篇文章展示了如何在空格上进行拆分,但是当我尝试将字符串流存储到字符串向量中时,我遇到了这个编译错误。

repl.cpp: In function ‘int main(int, char**)’:
repl.cpp:52:25: error: range-based ‘for’ expression of type ‘std::__cxx11::basic_istringstream<char>’ has an ‘end’ member but not a ‘begin’
         for (string s : iss)
                         ^~~
repl.cpp:52:25: error: ‘std::ios_base::end’ cannot be used as a function
make: *** [repl.o] Error 1

下面是完整的代码:

#include <cstdlib>                                                                                         
#include <iostream>
#include <string>
#include <sstream>
#include <vector>
#include <fstream>
#include <stdlib.h>
#include <unistd.h>
#include <dirent.h>
#include <sys/stat.h>
using namespace std;

int main(int argc, char *argv[])
{
    size_t pos;
    int pipe = 0;
    int pid = 0;
    vector <size_t> positions;
    vector <string> arguements;
    do  
    {   
        cout << "repl$ ";
        getline(cin, cmd);

        pos = cmd.find( "|", 0); 
        while ( pos != string::npos )
        {   
            positions.push_back(pos);
            pos = cmd.find( "|", pos+1);
            pipe += 1;
            pid += 1;
        }   

        istringstream iss(cmd);

        while (iss >> cmd)
            arguements.push_back(cmd);  

        for (string s : iss)
            cout << s << endl;

    } while (cmd != "q");
    return EXIT_SUCCESS;
}             
丹尼尔·舍普勒

您需要使用 astd::istream_iterator<std::string>来读取连续的字符串。Boost 有一个包装器来创建一个伪容器,表示从istream;读取的对象序列例如:

for (const auto& s : boost::range::istream_range<std::string>(iss))
    std::cout << s << '\n';

在这种特定情况下,另一种方法是直接复制到输出迭代器:

std::copy(std::istream_iterator<std::string>{iss},
          std::istream_iterator<std::string>{},
          std::ostream_iterator<std::string>{std::cout, '\n'});

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C ++中基于范围的for循环的替代方法

来自分类Dev

基于C ++范围的for循环和元素复制

来自分类Dev

基于范围的非常量文字C ++循环

来自分类Dev

C ++实现基于循环和基于范围的循环性能

来自分类Dev

C ++ istringstream和空格

来自分类Dev

istringstream不改变c ++

来自分类Dev

开始/结束成员变量和基于范围的for循环

来自分类Dev

开始/结束成员变量和基于范围的for循环

来自分类Dev

难以理解C ++中的istringstream

来自分类Dev

C ++ 11对动态数组使用“基于范围的for循环”(每个)

来自分类Dev

将在C ++中基于范围的for循环保留索引顺序

来自分类Dev

C ++基于范围的for循环遍历valarray rvalue不起作用

来自分类Dev

基于范围的循环:自动更改在C ++ 11中的含义

来自分类Dev

基于C ++ 11范围的派生对象上的for循环

来自分类Dev

在Qt中正确使用基于C ++ 11范围的for循环

来自分类Dev

C ++ 98中基于范围的循环和向量

来自分类Dev

基于分段错误范围的相邻元素循环C ++

来自分类Dev

基于C ++范围的循环在内部如何工作

来自分类Dev

C ++ 11基于范围的for循环:如何忽略值?

来自分类Dev

以抽象类为声明的基于范围的 for 循环 C++

来自分类Dev

基于范围的循环转换

来自分类Dev

在向量中的点处有基于范围的for循环开始

来自分类Dev

向量是成员变量的基于范围的for循环

来自分类Dev

是否有c.ended(iter)方法与基于范围的for循环兼容?

来自分类Dev

有什么理由不对基于C ++范围的for循环使用auto&?

来自分类Dev

在现代C ++中,是否有等效于python中基于范围的“枚举”循环?

来自分类Dev

使用带有右值range-init的C ++ 11基于范围的for循环是否安全?

来自分类Dev

有什么理由不对基于C ++范围的for循环使用auto&?

来自分类Dev

C ++基础知识:基于范围的for循环并将C样式的数组传递给函数

Related 相关文章

  1. 1

    C ++中基于范围的for循环的替代方法

  2. 2

    基于C ++范围的for循环和元素复制

  3. 3

    基于范围的非常量文字C ++循环

  4. 4

    C ++实现基于循环和基于范围的循环性能

  5. 5

    C ++ istringstream和空格

  6. 6

    istringstream不改变c ++

  7. 7

    开始/结束成员变量和基于范围的for循环

  8. 8

    开始/结束成员变量和基于范围的for循环

  9. 9

    难以理解C ++中的istringstream

  10. 10

    C ++ 11对动态数组使用“基于范围的for循环”(每个)

  11. 11

    将在C ++中基于范围的for循环保留索引顺序

  12. 12

    C ++基于范围的for循环遍历valarray rvalue不起作用

  13. 13

    基于范围的循环:自动更改在C ++ 11中的含义

  14. 14

    基于C ++ 11范围的派生对象上的for循环

  15. 15

    在Qt中正确使用基于C ++ 11范围的for循环

  16. 16

    C ++ 98中基于范围的循环和向量

  17. 17

    基于分段错误范围的相邻元素循环C ++

  18. 18

    基于C ++范围的循环在内部如何工作

  19. 19

    C ++ 11基于范围的for循环:如何忽略值?

  20. 20

    以抽象类为声明的基于范围的 for 循环 C++

  21. 21

    基于范围的循环转换

  22. 22

    在向量中的点处有基于范围的for循环开始

  23. 23

    向量是成员变量的基于范围的for循环

  24. 24

    是否有c.ended(iter)方法与基于范围的for循环兼容?

  25. 25

    有什么理由不对基于C ++范围的for循环使用auto&?

  26. 26

    在现代C ++中,是否有等效于python中基于范围的“枚举”循环?

  27. 27

    使用带有右值range-init的C ++ 11基于范围的for循环是否安全?

  28. 28

    有什么理由不对基于C ++范围的for循环使用auto&?

  29. 29

    C ++基础知识:基于范围的for循环并将C样式的数组传递给函数

热门标签

归档