【问题标题】:Use any character as delimiter on std::getline()在 std::getline() 上使用任何字符作为分隔符
【发布时间】:2017-08-13 22:37:24
【问题描述】:

我正在尝试计算存储到字符串中的文件中行首的空格' '。 问题是当发现任何与' ' 不同的字符时,我不知道如何告诉std::getline() 停止。

std::getline(file_input, string_target, 'Any_character_except_space');

【问题讨论】:

  • 您可能错误地处理了这个问题。我能想到的一把锤子是std::regex
  • std::getline 不会那样做。编写自己的函数,一次读取一个字符,直到找到符合条件的字符。
  • 你可以寻找一个空格并计算std::getline(f, s, ' ');读取空字符串的次数。

标签: c++ stdout stdin getline


【解决方案1】:

您不能使用除空格以外的任何字符作为std::getline() 的分隔符,任何签名都不允许这样做。

你可以做的是例如:

std::string line;
std::getline(file_input,line);
auto pos = std::find_if_not(std::begin(line),std::end(line),[](char c) {
        return std::isspace(c);
     // or c == ' '
     // or whatever condition you need
    } );
size_t space_count = std::distance(std::begin(line),pos);

这是full example

【讨论】:

  • 为什么是有条件的?如果pos == std::end(line),那么字符串全是空格,std::distance(std::begin(line), pos)会返回字符串的长度,也就是字符串开头的空格数,在这种情况下。
  • @Benjamin 看来你是对的。我脑子里的逻辑略有不同。
猜你喜欢
  • 2017-03-02
  • 2012-03-02
  • 1970-01-01
  • 2010-09-18
  • 2020-09-08
  • 1970-01-01
  • 2017-10-25
  • 2013-02-10
相关资源
最近更新 更多