2013-04-07 220 views
0

這裏是從我的代碼字符串在C中包含字符串++的文本文件

string word; 
cin >> word; 
string keyword; 
while (file >> keyword && keyword != word){} 

該搜索在文件中的單詞的一部分,如果它發現字(關鍵字),然後它開始從那裏串後來。目前它的工作很完美。我的問題是,當行則

"Julia","2 Om.","KA","1 Om. 4:2" 

如果我輸入單詞朱莉婭我無法找到它,並用它爲我的目的(僅供參考我就指望它)。它的工作原理,如果我搜索「茱莉亞」,「2因爲這是空間的用武之地。

我想知道我怎麼可以改變線

while (file >> keyword && keyword != word){} 

這樣我就可以看到當文本/字符串CONTAINS該字符串,因爲目前它只發現並接受它,如果我完全輸入整個字符串。

編輯:另外我發現這個目前只是strstr,strtok,strcmp。但是這些更適合printf比與cout

+0

所以如果你輸入'Julia',你希望它以'keyword'作爲''Julia',「2'停下來?還是你想讓它停止,關鍵字是'Julia'? – 2013-04-07 23:14:53

+0

否,如果我進入朱莉婭,我希望它找到朱莉婭 - 目前它沒有找到它,它能夠找到「朱莉婭」,「2因爲這是整個部分,但我並不需要它。 – 2013-04-07 23:16:38

回答

1

的問題是,你提取的字符串,它通過默認設置W生病直到下一個空間。所以在第一次迭代中,keyword"Julia","2。如果要提取所有以逗號分隔的,我建議使用std::getline,作爲分隔符:

while (std::getline(file, keyword, ',')) 

這將期待通過所有的引用字符串。現在你可以使用std::string::find來確定輸入word是帶引號的字符串中發現:

while (std::getline(file, keyword, ',') && 
     keyword.find(word) == std::string::npos) 

現在通過每個引用的字符串,直到它到達包含word一本將循環。

+0

嗯,我正試圖讓它在這一刻起作用。 2.如果我從你最後的評論中瞭解你,Om不應該是關鍵字。我的輸入是Julia,我的輸出實際上是 int cnt = 1+ count(istream_iterator (file),istream_iterator (),word); cout << word <<「出現在文本」<< cnt <<「times」; 正如你所看到的,我正在寫朱莉婭,然後想要朱莉婭的單詞數量,但是如果朱莉婭被其他角色包圍了,它不會找到朱莉婭。 – 2013-04-07 23:37:03

+0

所以我實際上不希望循環結束,因爲我需要統計文件中的所有Julia,並且在我的文件中有這些名稱的加載。 – 2013-04-07 23:47:52

+0

謝謝你的幫助!現在,我可以在該文件中找到Julia,但它只計算一次,並停止在名稱第一次找到的行中。由於該文件中有10個Julia行(20000行,所有不同的名稱),我仍然需要循環,任何想法我怎麼能這樣做? – 2013-04-07 23:58:28

3

你可以使用std :: string中的方法如find

#include <string> 
#include <iostream> 
// ... 
std::string keyword; 
std::string word; 

getline(file, keyword); 
do 
{ 
    std::cin >> word; 
} 
while (keyword.find(word) == std::string::npos); 
+0

儘管這是我認爲他們最初描述的內容,但我不認爲這是他們想要的。他們不想讓'Julia','2'匹配成'Julia' – 2013-04-07 23:18:48

+0

@sftrabbit即使它被其他角色包圍,他也想找到Julia,即使它被其他角色包圍也會發現Julia – Patashu 2013-04-07 23:19:58

+0

是,這就是我的意思Patashu。對不起,混淆,並感謝您的答案:)我會盡力讓它現在工作 – 2013-04-07 23:21:36

0

使用的IStream這種方法來獲得一整行,而不是隻是一個單一的「字」:

http://www.cplusplus.com/reference/istream/istream/getline/

然後使用的strstr,找到一個字符串的位置(如朱利亞)在一個字符串(文件行):

http://www.cplusplus.com/reference/cstring/strstr/

+0

謝謝,strstr雖然適合printf。我會嘗試使用std :: string查找方法。 – 2013-04-07 23:23:11

+0

@Jack Longen我也更喜歡Julien的回答 – Patashu 2013-04-07 23:23:39

相關問題