【问题标题】:Problem with duplicate characters when making an array of struct Node制作结构节点数组时出现重复字符的问题
【发布时间】:2021-06-19 08:11:56
【问题描述】:

我有一个节点结构:

struct Node {
    int freq;
    char letter;
    string code;
    Node* left;
    Node* right;
    Node* up;
};

我有一个输入阅读器,它应该存储每个字母中的一个以及它的频率,但是当通过 for 循环将节点分配给我的数组时,我得到了重复的字母。:

for(int i = 0; i<26 ; i++){
      N[i] = new Node;
      N[i]->freq = alphabet[i];
      N[i]->letter = input[i];  //problem line
}

输入数组作为字符串传递给函数,Alphabet 是一个按字母顺序存储频率的数组。 我知道我收到了重复的字母,因为输入字符串直接放入数组中而不进行比较,但是我找不到一种方法让它检查N[] 中的其他节点以查看节点结构中的 char 成员已经被放入数组中。任何帮助表示赞赏。

【问题讨论】:

  • 也许您会从std::map&lt;letter,Node*&gt; 中受益?请创建一个minimal reproducible example。
  • 如果现有节点中有匹配项,您想做什么?你可以有一个嵌套循环来找到这样的:for (int j = 0; j &lt; i; ++j) if (N[j]-&gt;letter == input[i]) { &lt;whatever&gt; }。也许为您的问题添加一些细节/清晰度。

标签: c++ arrays struct


【解决方案1】:

我们不会为您做这一切,但我们可以为您提供指导:

for(int i = 0; i<26 ; i++)
{
    Node* node = getNodeForLetter(alphabet[i]);
    N[i]->freq++;

    // might be redundant, but no big deal
    // or you could do that in getNodeFor
    N[i]->letter = input[i];  
}

您需要编码getNodeForLetter。

通过这样的设置,您就有了一个函数,可以为您提供给定角色的节点。您需要有条件地在该函数中分配。然后你增加频率。并确保字母设置正确。

【讨论】:

  • 我不明白这有什么帮助。 getNodeForLetter 的返回值分配给从未使用过的局部变量 node。
  • 嗯,由 OP 决定将它存储在哪里。 map 可能是个好主意。但是根据我们掌握的信息,OP 需要的下一点似乎是“一些功能,而不是总是执行分配”。这个答案建议“将该功能放在一个函数中,这就是逻辑所在”
猜你喜欢
  • 1970-01-01
  • 2019-03-11
  • 2017-02-12
  • 2021-09-05
  • 2011-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多