//运行初始值并将它们设置为null和零;
for(int g =0;g<Arraysize;g++){Array1[g].word="NULL";Array1[g].usage=0;}
//struct
int Arraysize = 100;
struct HeavyWords{
string word;
int usage;
};
//runs through txt file and checks if word has already been stored, if it didn't,
it adds it as the next point in the struct, if it has, it adds to the usage int at that point in my array of structs
while (myfile >> Bookword)
{totalwords++;cout<<Bookword<<endl;
bool foundWord = false;
for(int q = 0;q<counter;q++)
{
if(Array1[q].word == Bookword)
{
Array1[q].usage++;
foundWord = true;
}
}
if(foundWord == false) {
Array1[counter].word = Bookword;
Array1[counter].usage = 1;
counter++;
//cout<<counter<<endl;
}
//double size of array when the counter reaches array size
if(counter==Arraysize)
{
HeavyWords * Array2;
Array2 = new HeavyWords[2*Arraysize];
for (int k= 0;k<Arraysize;k++)
{
Array2[k].word = Array1[k].word;
}
Arraysize = 2*Arraysize;
Arraydouble++;
HeavyWords* cursor = Array1;
Array1 = Array2;
delete [] cursor;
}
}
//我刚开始使用C ++进行编程,所以如果这段代码突然爆发,我会道歉。 //这是我的代码, //我一直在绞尽脑汁为什么没有正确存储每个单词的用法,但是当我运行它时,它给了我不正确的次数使用某些单词 //如果有人能告诉我逻辑出错的地方,我真的很喜欢
答案 0 :(得分:0)
立即问题 - 将Array1复制到Array2时,您没有复制用法。
解决方案 - 复制用法。诸如Array2 [k] = Array1 [k]之类的语句可以。
建议:
当您在Array1中找到要查找的单词的匹配项时,您也不会在代码的第一部分中突破。你的代码将不必要地继续迭代整个数组,例如,在第10个索引处找到匹配,你可能已经退出了for循环。
你正在发明轮子。你需要一个可扩展的阵列; C ++ STL有一个现成的 - 它叫做vector。
同样,Array / Vector看起来不是您正在尝试做的正确选择。在每个单词上,您正在对Array1进行线性搜索。来自C ++ STL的地图可以整齐有效地完成你想要做的事情。你的代码也会短得多。您可以查看如何使用地图进行编码。如果你写一些代码,我可以进一步帮助。或等;这里有人会为你写出完整的代码:)。