2017-10-10 29 views
-1

我有一个自定义的String类,它包含一个char数组,并且我需要重载此类的>>操作符。对于我的生活,我无法弄清楚如何做两件事。使用操作符时的空格和特定字符>>

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

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循环。

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

+0

的[我怎么能在C++读取并解析CSV文件?(可能的复制https://stackoverflow.com/questions/1120140/how-can-i-read-and-parse-csv-files -in-c) – user0042

+0

这不是问题,但有一个名为'output'的**输入**流是不寻常的。 –

+0

一次读取一个字符,并测试它是否与特定字符匹配。 – Barmar

回答

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, ';'); 
}