所以基本上我正在编写一个字典程序,它读取文档并将其与单词列表进行比较,如果找不到单词,我需要将单词添加到地图及其对应的行号中该单词出现在文档中。所以我试图这样做,但我无法得到预期的结果!这是我的代码:
while (ss >> word)
{
wordCheck = d.findWord(word, words);
if(!wordCheck)
{
doc.missingMap(word, lineNum);
}
}
doc.displayMap();
//this just breaks up each line and checks for the words
void document::missingMap(string word, int lineNum)
{
vector<int> numbers;
numbers.push_back(lineNum);
misspelled[word] = numbers;
}
这是文档调用中的函数,可以将所有内容放在地图中。我不知道我是否走在正确的轨道上,但如果有人能帮助我,那将是非常棒的。 谢谢!
更详细的代码
文档类:
#pragma once
#include <iostream>
#include <string>
#include <map>
#include <vector>
#include <sstream>
#include <list>
using namespace std;
class document
{
private:
map<string, vector<int>> misspelled;
public:
document(void);
~document(void);
void missingMap(string word, int lineNum);
void displayMap();
};
document.cpp文件
#include "document.h"
document::document(void)
{
map<string, vector<int> > misspelled;
}
document::~document(void){}
void document::missingMap(string word, int lineNum)
{
//if i declare it here it works but obviously i want to modify it everywhere in the class
misspelled[word].push_back(lineNum);
}
void document::displayMap()
{
for (map<string, vector<int>>::iterator i = misspelled.begin(); i != misspelled.end(); i++)
{
cout << i->first << ": ";
for (vector<int>::iterator j = i->second.begin(); j != i->second.end(); j++)
{
cout << *j << endl;
}
}
}
输出:
debugging: 1
process: 2
removing: 2
programming: 3
process: 4
putting: 4
这就是我想要它输出但不知道如何:
debugging: 1
process: 2 4
programming: 3
putting: 4
removing: 2
希望这有助于
答案 0 :(得分:0)
请尝试misspelled[word].push_back(lineNum);
。
按如下方式更改您的班级声明:
class document
{
private:
std::map<std::string,std::vector<int> > misspelled;
// ^^^^^^^^^^^^^^^^ !!!
public:
document(void);
~document(void);
void missingMap(string word, int lineNum);
void displayMap();
};
在您的document
课程中,正如您现在所做的那样,在{{1}的每次通话中,您正在用vector
地图替换存储在misspelled
地图中的missingMap()
函数,而不是向地图条目添加更多的行号(我猜你想要)。
注意强>
您不需要显式创建std::vector<int>
实例作为misspelled[word]
的任何访问权限的初始条目,std::map
可以为您处理。