【问题标题】:String in a text file containing a string in C++包含 C++ 中字符串的文本文件中的字符串
【发布时间】:2013-03-29 22:29:10
【问题描述】:

这是我的代码的一部分

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。

【问题讨论】:

  • 所以如果您输入Julia,您希望它以keyword 作为"Julia","2 停止吗?还是您希望它以keyword"Julia" 停止?
  • 不,如果我输入 Julia,我希望它找到 Julia - 目前它找不到它,它能够找到“Julia”,”2 因为这是整个部分,但我会不需要那个。

标签: c++ string search line contain


【解决方案1】:

您可以使用 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);

【讨论】:

  • 虽然我一开始以为他们是这样描述的,但我不认为这是他们想要的。他们不希望 "Julia","2 匹配为 Julia
  • @sftrabbit 他即使被其他角色包围也想找到Julia,即使被其他角色包围也能找到Julia。
  • 是的,这就是我的意思帕塔舒。很抱歉造成混淆,感谢您的回答:) 我现在会尝试让它工作。
  • @JackLongen 我仍然认为这不是你想要的。您仍将提取 "Julia","2 而不是 "Julia"。使用这种方法根本找不到关键字2 Om.
【解决方案2】:

问题是您正在提取字符串,默认情况下将提取到下一个空格。所以在第一次迭代中,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 的字符串。

【讨论】:

  • 嗯,我正在努力让它工作。另外 2. Om 不应该是关键字,如果我从你的最后评论中理解你的话。我的输入是 Julia,我的输出实际上是 int cnt = 1+ count( istream_iterator(file), istream_iterator(), word); cout
  • 所以我实际上不希望循环在那里结束,因为我需要计算一个文件中的所有 Julia,并且我的文件中有大量这些名称。
  • 感谢您的帮助!现在我可以在该文件中找到 Julia,但它只计算一次并在第一次找到名称的行中停止。由于该文件中有大约 10 行 Julia 行(20 000 行,所有不同的名称),我仍然需要它循环,知道我该怎么做吗?
【解决方案3】:

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

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

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

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

【讨论】:

  • 谢谢,strstr 更适合 printf。我会尝试使用 std::string 查找方法。
  • @Jack Longen 我也更喜欢 Julien 的回答
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-12-20
  • 1970-01-01
  • 2013-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-06
相关资源
最近更新 更多