使用运算符>>时的空格和特定字符

时间:2017-10-10 21:03:16

标签: c++

我有一个包含char数组的自定义String类,我需要重载>>这门课程的操作员。对于我的生活,我无法弄清楚如何做两件事。

1 - 读取用户输入,直到;到达

2 - 包含用户输入的空白​​

我不能使用命名空间或c ++的内置字符串。不幸的是,排除了使用getline和任何方便的查找功能(我认为它确实如此?)。我试过的一些事情:

std::istream& operator >> (std::istream& output, String& input) {
    output >> input.str;
return output;}

这可以工作,但直到第一个空格,之后它才停止读取用户输入。

std::istream& operator >> (std::istream& output, String& input) {
while (output != ';') {
    output >> input.str;
}
return output;}

一个istream我猜不等同于用户输入,所以你无法将它与我在while循环中尝试过的char进行比较。

所以,我的问题是,在遇到指定字符之前,如何读取输入,以及在使用>>时如何包含所有空格? ?

1 个答案:

答案 0 :(得分:0)

字符串/字符输入的全局operator>>在遇到空格时会停止读取,因此根据全局operator>>实现自定义operator>>是不值得的。

您排除了对std::getline()的使用,但您可以使用std::istream::getline()。与std::getline()类似,它还有一个可选的delim参数(默认为'\n'),并且会读取字符 - 包括空格 - 直到达到分隔符或EOF。

std::istream& operator >> (std::istream& input, String& output)
{
    return input.getline(output.str, yourmaxstrsize, ';');
}