[英]Unexpected behavior of ifstream (word counting)
我正在嘗試測量txt文件中的單詞總數。 該文件是隨機的,由每行10個字組成,每行長度3到10,由該代碼生成。 特定行中的單詞由單個空格分隔。 現在,我測量文件中單詞總數的方法是:
ifstream inputFile("myfile.txt", ios::in | ios::binary | ios::ate );
//Count number of total words in input file
long unsigned int numWords;
inputFile.seekg(0);
char c;
while (inputFile.get(c)){
if (isspace(c) && c != '\r') numWords++;
}
//Test
printf("\nSampled file has %lu words\n", numWords);
如果我多次運行以上代碼,則其中一半將得到正確的結果,而另一半將得到一個隨機數。 我知道有更優雅的方法可以做到
string word;
long unsigned int ctr = 0;
while (inputFile >> word) ctr++;
(或其他),但我想知道第一個選擇為什么失敗。
您的代碼有多個問題
'\\r'
, '\\n'
或"\\r\\n"
分隔。 如果以文本模式打開,則保證行用'\\n'
分隔。 ios::ate
標志打開文件並立即調用seekg(0)
什么意義? 它可以工作,但是省略位ios::ate
和seekg
具有相同的效果,並且減少了編寫和讀取的代碼。 '\\r'
),而不是單詞。 包括雙精度空格,行尾的'\\n'
字符和類似字符。 numWords
。 使用它會調用未定義的行為。 在您的情況下,隨機結果是最可能的效果。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.