gpt4 book ai didi

c++ - 如何使用带有分隔字符串而不是空格的符号的输入字符串流?

转载 作者:太空宇宙 更新时间:2023-11-04 12:40:43 25 4
gpt4 key购买 nike

注意:我刚刚了解了 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 所说。但是,它只会提取 string,并且您还有 int

可以在这个答案中找到类似的解决方案,我修改了代码以满足您的需要:changing the delimiter for 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,您可以将被解释为空格的多个字符。

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

关于c++ - 如何使用带有分隔字符串而不是空格的符号的输入字符串流?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54319643/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com