2011-11-08 79 views
1

我正在編寫一個C++程序來計算文本文件中出現的單詞的頻率。我使用isalpha函數分隔單詞,但isalpha不區分具有不同標點符號的相同字符串。在C++中區分具有不同標點符號的相同字符串

例如:「我擁有一家公司,在我的公司裏有200名員工,我愛我的公司。」 在上面的句子裏它給公司的數量爲3 如何使它分化像計數:

company 1 
company, 1 
company. 1 

這不計數的循環:

while(!isalpha(c) && !in.eof()) 
{ 
    c = in.get(); 
} 

while(isalpha(c)) 
{ 
    out.push_back(tolower(c)); 
    c = in.get(); 
} 

哪裏「出」是一個字符串,'in'是一個istream值,c是一個char。

[編輯]得到了解決

while(!isalpha(c) && !ispunct(c) !in.eof()) 
{ 
    c = in.get(); 
} 

while(isalpha(c) || ispunct(c)) 
{ 
    out.push_back(tolower(c)); 
    c = in.get(); 
} 
+0

重新檢查並重新考慮'while'條件的邏輯。 –

+0

你好,@user - 這是一個家庭作業問題嗎?我們有時候會幫助做作業,但是我們知道這是否有益。 –

+0

沒有Rob,這只是我在探索C++,我想有人頭腦風暴。無論如何,感謝解決方案,併爲其他人發佈。 – user1035927

回答

2

我想用自己的方式爲好(我希望公司有計數3)。

但是,如果要分隔單詞和標點符號很重要,請使用isspace()作爲分隔符。

注意:標準流>>運算符已經爲你做了這個。

std::string word; 
in >> word; 
std::transform(word.begin(), word.end(), word.begin(), ::tolower); 
+0

所以,而不是在兩個while循環isalpha你想我使用isspace? – user1035927

+0

@ user1035927:是的(並反轉不條件)。 –

+0

好吧,得到的解決方案,我用ispunct而不是一個或條件:感謝您的幫助.... – user1035927

相關問題