如何使用符号分隔字符串而不是空格的输入字符串流
How to use Input String Stream with symbols seperating strings instead of spaces?
注意:我刚刚了解了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
s,而且您还有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"的概念,您可以研究这些概念来构建可靠的数学求解器。希望它也有帮助。
相关文章:
- 为字符串中每 N 个字符插入空格的函数没有按照我认为的方式工作?
- 移除前面有空格的前2个字符串
- 用于存储由空格分隔的字符串的 C++/C 数据结构
- 在字符串中插入空格
- C ++中的StringStream有助于使用向量从字符串中提取逗号分隔的整数,而不是空格分隔的整数,为什么?
- 使用另一个字符串从字符串中删除空格
- 我还可以添加什么来按空格或空格正确拆分C++字符串?
- C++ "noskipws"没有按预期工作,如何正确允许字符串中的空格?
- 在 c++ 中逐行阅读字符串,不要以空格停止
- std::regex:匹配由数字和空格组成的字符串,并提取数字.如何?
- 如何存储包含多个空格的字符串 c++
- 在特定位置为字符串添加空格
- 有没有办法在 c++ 中获取带有空格的完整字符串?
- C++完全复制要字符串的字符列表,而不会忽略多个空格
- Winsock2:当我尝试发送带有空格的字符串时,该函数在遇到空格时似乎停止发送
- 从没有空格的字符串中提取整数
- 用于拆分空格字符串的程序不起作用
- 解析C++中的完整(从头到尾)字符串,包括所有空格
- 反转字符串中单词的位置,而不更改 O(1) 空格限制中特殊字符的顺序
- 当我的 if 语句在字符串中找到空格时,在无限循环中切换