包含c++中字符串的文本文件中的字符串

String in a text file containing a string in C++

本文关键字:字符串 文件 文本 c++ 包含      更新时间:2023-10-16

这是我代码中的一部分

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);

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

使用istream的这个方法来获取整行而不是单个"word":

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

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

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