0

这是我的代码的一部分

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。

4

3 回答 3

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);
于 2013-04-07T23:17:36.980 回答
1

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

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

这将查看所有引用的字符串。现在您可以使用std::string::find来确定输入word是否在该引用字符串中找到:

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

现在这将遍历每个引用的字符串,直到它到达包含word.

于 2013-04-07T23:21:54.360 回答
0

使用 istream 的这种方法来获取整行而不是单个“单词”:

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

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

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

于 2013-04-07T23:17:51.833 回答