2013-07-13 22 views
1

我有一個測試,我從std::istringstream得到字符。我想獲得測試期間未讀取的std::istringstream部分。 std::istringstream::str()函數返回整個字符串,而不僅僅是未讀的部分。得到istringstream的未讀部分

如何獲取字符串的這一部分?

+0

'的std ::函數getline(mystringstream,rest_of_string)' –

+1

@MooingDuck這是不是隻是一直讀到的..結束線? (直到'istringstream'的'eof'。) – dyp

+0

oops。 'std :: getline(mystringstream,rest_of_string,0);'會一直讀取,直到找到一個更接近的NULL或EOF。 –

回答

3

假設你沒有手動此行之前設定的輸入位置指示:

std::string unread = stream.eof() ? "" : stream.str().substr(stream.tellg()); 
+0

這是否適用於所有std :: istringstream實現? – Graznarak

+0

@Graznarak是的,這裏沒有具體的實現。 – 0x499602D2

+0

@DyP我不太明白。我沒有使用'rdbuf() - > str()',我知道它會返回整個字符串。 – 0x499602D2

0

要做到這一點,我認爲最簡單的方法是將istringstream的讀取緩衝區推到一個字符串流:

void test(std::istringstream& iss) 
{ 
    /* Test code */ 
} 

int main() 
{ 
    std::istringstream iss; 
    std::stringstream not_readed_buffer; 
    std::string not_readed; 

    test(iss); 

    if(iss) 
    { 
     not_readed_buffer << iss.rdbuf(); 
     not_readed = not_readed_buffer.str();  
    } 
} 

檢查this answer for a similar question