2013-11-03 71 views
0

我正在嘗試計算輸入流中的字符數,直到第一個非數字,而不實際從流中提取字符。輸入可以包含任意數量的字符。我需要這樣做,以確定是否應該在數組中存儲數字之前增長動態數組。在不提取的情況下讀取輸入流

我僅限於下列庫:iostream的,CString的,cctype

我的想法是這樣的:

int counter = 0; 
const char * s = cin.getline(); 

while(s[counter] <= '0' || s[counter] >= '9') 
{ 
    counter++; 
} 

但我有一些麻煩,要工作。任何意見將不勝感激!

+1

我只是根據需要增長動態數組!複製字符速度非常快,如果陣列呈指數增長,整體複雜度仍然是線性的。 –

+0

這很有道理。我不知道我爲什麼不只是這樣做。出於某種原因,我在腦海中想要在提取之前調整大小。我只是添加了一個簡單的:if(maxSize == counter){Grow(); }現在它工作正常。謝謝! –

回答

1

嘗試類似:

std::istream::pos_type start = is.tellg(); 

while (std::isdigit((is >> std::ws).peek()) && is.ignore()) 
    ; 

counter = in.tellg(); 
is.seekg(start, std::ios_base::beg); 

是否空格都視爲在這種情況下,非數字字符?如果是這樣,請刪除while()循環中的第二行,該循環丟棄前導空白。

+0

如果你想尋找,你可能想要回到序列的開始。爲每個角色尋求前進也將是可怕的!你最好使用'sbumpc()'。 –

+0

@DietmarKühl不明白「尋求迴歸」的意思?你可以解釋嗎?但我會採取你的其他建議! :) – 0x499602D2

+0

的要求是確定有多少角色會來,而不是消耗他們。你的代碼會消耗它們!你需要像'std :: istream :: pos_type start(in.seekg(0,std :: ios_base :: cur)); ...; in.seekg(start);' –

相關問題