2013-04-07 179 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

相关问题