我正在编辑这个问题因为我已经解决了问题,要按照我的意愿映射和分割字符串。现在我已经找到了如何在文件中找到特定的字符串。但无法弄清楚如何打印此特定字符串所在的所有行。例如,如果第5行和第7行中出现字符串 t1(" Cap900"),我想将整行打印在彼此之下。
ifstream f("test.txt");
string t1("Cap900");
istreambuf_iterator<char> eof;
if(eof == search(istreambuf_iterator<char>(f), eof, t1.begin(), t1.end()) )
cout << "String \"" << t1 << "\" was NOT found in the file " << endl;
else
cout << "String \"" << t1 << "\" was found in the file " << endl;
答案 0 :(得分:0)
我不知道我是否正确阅读此内容,但您似乎正在尝试对文件中的所有行进行排序。如果是这种情况,我有一个建议。
您熟悉std :: map数据结构吗?如果Cap900之后的数据是您想要匹配的数据,您可以创建一个使用该字符串作为键的映射,或者通过将该字符串散列为整数值(例如:使用您可以找到的散列here)或者使用完整的字符串作为哈希,虽然我认为它可能会更慢。像这样:
// ... other code up here ...
string original;
getline(inFile, original, '\0');
int hash = FuncThatHashesAString(original);
std::map<int, std::vector<string> > lineMap;
// indexing into the map at a location will either return a reference to a vector or create a new one that is empty
lineMap[hash].push_back(original);
// afterwards you can print out each line in order using a loop like this
auto it = lineMap.begin();
for(; it != lineMap.end(); ++it)
{
for(unsigned i = 0; i < it->second.size(); ++i)
{
string strOriginal = it->second[i];
// then print your string to a new file if you want
}
}
当然这是添加完整行,但是在将数据用作哈希之前,您需要先解析数据。我想你也想把整行添加到地图上,而不仅仅是Cap900右边的数据。如果这对你有帮助,请告诉我!