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