如何使用符号分隔字符串而不是空格的输入字符串流

How to use Input String Stream with symbols seperating strings instead of spaces?

本文关键字:字符串 空格 输入 何使用 符号 分隔      更新时间:2023-10-16

注意:我刚刚了解了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;
}

免费函数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)的行来扩展表,只更改Delim,则可以将多个字符解释为空格。

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