1

注意:我刚刚了解了 Getline 和 Streams。

不是用空格分隔名字、姓氏和年龄,而是如何用 ^ 或 -- 分隔它们?

有这个功能吗?这是一个愚蠢的问题吗?如果是,为什么?

- 这个问题的原因是因为我打算制作一个解决多项式导数的函数并且失败了。

int main() {
  istringstream inSS;       // Input string stream
  string lineString;        // Holds line of text
  string firstName;         
  string lastName;         
  int    userAge;          


  getline(cin, lineString);


  inSS.str(lineString);


  inSS >> firstName;
  inSS >> lastName;
  inSS >> userAge;

  return 0;
}
4

1 回答 1

1

免费功能getline还提供自定义分隔符,如 user4581301 所说。但是,它只会提取strings 而你也有int.

在这个答案中可以找到类似的解决方案,我已经修改了代码以满足您的需求:更改 cin (c++) 的分隔符

您可以使用imbue一些自定义分隔符。一个简单的例子如下:

#include <locale>
#include <iostream>

template<char Delim>
struct alternativeDelimiter : std::ctype<char> {
  alternativeDelimiter() : std::ctype<char>(get_table()) {}

  static mask const* get_table()
  {
    static mask rc[table_size];
    rc[Delim] = std::ctype_base::space;
    return &rc[0];
  }
};

int main() {
  using std::string;
  using std::cin;
  using std::locale;

  cin.imbue(locale(cin.getloc(), new alternativeDelimiter<'^'>));

  string word;
  while(cin >> word) {
    std::cout << word << "\n";
  }
}

imbue确实拥有ctype,所以不用担心自己调用 delete 。

如果你输入some^text,输出将是

some
text

当然,您也可以将它与您的示例一起使用。

如果您通过编写类似于第 11 行 ( rc[Delim] = std::ctype_base::space) only changed的​​行来扩展表格Delim,您可以有多个将被解释为空格的字符。

不过,我不确定这在多大程度上解决了您编写数学解析器的原始问题。一般术语涉及“解析器”和“词法分析器”的概念,您可以研究这些概念以构建可靠的数学求解器。希望它也有帮助。

于 2019-01-23T09:01:32.847 回答