注意:我刚刚了解了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;
}
答案 0 :(得分: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
的所有权,因此不必担心会叫自己删除。
如果输入some^text
,则输出为
some
text
当然,您也可以在示例中使用它。
如果仅通过更改rc[Delim] = std::ctype_base::space
而通过写类似于第11行(Delim
)的行来扩展表,则可以有多个字符将被解释为空格。
我不确定这能解决您最初编写数学解析器的问题。通用术语涉及“解析器”和“词法分析器”概念,您可以研究这些概念以构建可靠的数学求解器。希望它也有帮助。