Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/143.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 文本文件中的字符串,其中包含C++;_C++_String_Search_Line_Contain - Fatal编程技术网

C++ 文本文件中的字符串,其中包含C++;

C++ 文本文件中的字符串,其中包含C++;,c++,string,search,line,contain,C++,String,Search,Line,Contain,这是我代码中的一部分 string word; cin >> word; string keyword; while (file >> keyword && keyword != word){} 这将在文件中搜索一个单词,如果找到该单词(关键字),则稍后将从那里开始一个字符串。目前它工作得很好。我的问题是,当线路 "Julia","2 Om.","KA","1 Om. 4:2" 如果我输入单词Julia,我就找不到它,也无法将其用于我的目的(仅供参考,

这是我代码中的一部分

string word;
cin >> word;
string keyword;
while (file >> keyword && keyword != word){}
这将在文件中搜索一个单词,如果找到该单词(关键字),则稍后将从那里开始一个字符串。目前它工作得很好。我的问题是,当线路

"Julia","2 Om.","KA","1 Om. 4:2"
如果我输入单词Julia,我就找不到它,也无法将其用于我的目的(仅供参考,我正在计算它)。如果我搜索“Julia”,“2”就行了,因为这是空间的来源

我想知道我怎么换行

while (file >> keyword && keyword != word){}
因此,我可以看到文本/字符串何时包含该字符串,因为目前只有当我完美地输入整个字符串时,它才能找到并接受该字符串


编辑:到目前为止,我还发现只有strstr、strtok和strcmp。但它们更适合printf而不是cout。

您可以使用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);
#包括
#包括
// ...
std::字符串关键字;
字符串字;
getline(文件,关键字);
做
{
std::cin>>单词;
}
while(关键字.find(word)==std::string::npos);

您可以使用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);
#包括
#包括
// ...
std::字符串关键字;
字符串字;
getline(文件,关键字);
做
{
std::cin>>单词;
}
while(关键字.find(word)==std::string::npos);

使用此istream方法获得一整行,而不仅仅是一个“单词”:

然后使用strstr查找字符串(如Julia)在字符串(文件行)中的位置:


使用此istream方法获得一整行,而不仅仅是一个“单词”:

然后使用strstr查找字符串(如Julia)在字符串(文件行)中的位置:


问题是您正在提取字符串,默认情况下,字符串将一直提取到下一个空格。因此,在第一次迭代中,
关键字是
“Julia”,“2
。如果要提取所有以逗号分隔的内容,我建议使用
std::getline
作为delimeter:

while (std::getline(file, keyword, ','))
这将检查所有带引号的字符串。现在,您可以使用
std::string::find
来确定输入的
word
是否在该带引号的字符串中找到:

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

现在,它将循环遍历每个带引号的字符串,直到找到包含
word

的字符串。问题是您正在提取字符串,默认情况下,将提取到下一个空格。因此,在第一次迭代中,
关键字
“Julia”,“2
。如果要提取所有以逗号分隔的内容,我建议使用
std::getline
作为delimeter:

while (std::getline(file, keyword, ','))
这将检查所有带引号的字符串。现在,您可以使用
std::string::find
确定是否在该带引号的字符串中找到输入
word

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


现在,它将循环遍历每个带引号的字符串,直到它到达包含
word

的字符串。因此,如果输入
Julia
,您希望它以
关键字停止,如
“Julia”,“2
?或者你想让它以
关键字
作为
Julia“
停止吗?不,如果我输入Julia,我想让它找到Julia-在它找不到它的时候,它能够找到“Julia”,“2因为这是整个部分,但我不需要它。因此,如果你输入
Julia
,你想让它以
关键字
作为
“Julia”停止2
?或者您希望它以
关键字
作为
“Julia”
停止吗?不,如果我输入Julia,我希望它找到Julia-在它找不到它的时候,它能够找到“Julia”,“2因为这是全部,但我不需要。虽然这是我认为他们最初描述的,但我不认为这是他们想要的。他们不想要
“Julia”,“2
要匹配为
Julia
@sftrabbit,他想找到Julia,即使它被其他字符包围,这会找到Julia,即使它被其他字符包围。是的,这就是我说的Patashu。很抱歉给你带来困惑,谢谢你的回答:)我现在就试着让它工作。@JackLongen我仍然不认为这是你想要的。您仍将提取
“Julia”、“2
而不是
“Julia”
。使用此方法将根本找不到关键字
2 Om.
。虽然这是我认为他们最初描述的内容,但我认为这不是他们想要的。他们不想要
“Julia”2
要匹配为
Julia
@sftrabbit,他想找到Julia,即使它被其他字符包围,这会找到Julia,即使它被其他字符包围。是的,这就是我说的Patashu。很抱歉给你带来困惑,谢谢你的回答:)我现在就试着让它工作。@JackLongen我仍然不认为这是你想要的。您仍将提取
“Julia”、“2
,而不是
”Julia“
。使用此方法根本找不到关键字
2om.
。谢谢,不过strstrstr更适合printf。我会尝试使用std::string查找方法。@Jack Longen我也更喜欢Julien的回答谢谢,不过strstr更适合printf。我会尝试使用std::string查找方法。@Jack Longen我也更喜欢Julien的答案,嗯,我正在努力让它工作。也是2。Om不应该是关键词,如果我从你上次的评论中理解你的话。我的输入是Julia,输出实际上是int cnt=1+count(istream_iterator(file),istream_iterator(),word);所以我实际上不希望循环到此结束,因为我需要计算文件中的所有Julia,并且在我的文件中有很多这样的名字。谢谢你的帮助!现在我可以在那个文件中找到Julia,但它只计算一次,然后停在第一次找到名字的那行。既然文件中有10行Julia行(20000行,所有不同的名称),我仍然需要让它循环,知道我该怎么做吗?嗯,我正在努力让它工作。也是2。Om不应该是关键词,如果我从你上次的评论中理解你的话。我的