菜鸟大学牲 2022-05-09 20:24 采纳率: 50%
浏览 29
已结题

表达示必须是可修改的左值,怎么解决?

问题遇到的现象和发生背景

二叉树,哈夫曼树,生成编码表

问题相关代码,请勿粘贴截图

#include<iostream>
using namespace std;

//first a jiedian 
struct HNode {
    int weight;
    int parent;
    int Lchild;
    int Rchild;

};

//second bainmajieidan 
struct HCode {
    char data;
    char code[100];
};

//define huffman class
class Huffman {
private:
    HNode*HTree;
    HCode*Table;
    char str[1024];
    char leaf[256];
    int a[256];
    int N;
    
public:
    int n;
    void init();//dingyi huffman tree
    void creatHTree(int a[],int n,char name[]);//chuangjian
    void selectMin(int &x,int&y,int s, int e);//
    void code(int i, string newcode);
    void creatCodeTable();//chuangjian bianmacode chart
    void Encode(char*d);//bianma
    void Decode(char*s, char*d);//jiema
    void print(int i, int m);
 };
//yizi jiedianshu jinxing jisuan
void Huffman::init() {
    int nNum[256] = { 0 };
    int ch = cin.get();
    int i = 0;
    while ((ch != '\r') && (ch != '\n')) {
        nNum[ch]++;//统计次数
        str[i++] = ch;//记录初识字符
        ch = cin.get();//用cin。get函数
    }
    str[i] = '\0';
    n = 0;
    for (i = 0; i < 256; i++) {
        if (nNum[i] > 0) {
            leaf[n] = (char)i;
            a[n] = nNum[i];
            n++;
        }

    }
}

//creat tree
void Huffman::creatHTree(int a[], int n, char name[]) {
    N = n;
    Table = new HCode[N];
    HTree = new HNode[2 * N - 1];
    for (int i = 0; i < n; i++) {
        HTree[i].weight = a[i];
        HTree[i].Lchild = HTree[i].Rchild = HTree[i].parent = -1;
        Table[i].data = name[i];
    }
    int x, y;
    for (int i = 0; i < 2 * N - 1; i++)//creat huffman tree
    {
        selectMin(x, y, 0, i);
        HTree[x].parent = HTree[y].parent = i;
        HTree[i].weight = HTree[x].weight + HTree[y].weight;
        HTree[i].Lchild = x;
        HTree[i].Rchild = y;
        HTree[i].parent = -1;
    }
}

//selectmin
void Huffman::selectMin(int &x, int&y, int s, int e) {
    int i;
    for (i=s;i<=e;i++)
        if (HTree[i].parent == -1) {
            x = y = i;
            break;
        }
    for(;i<e;i++)
        if (HTree[i].parent == -1) {
            if (HTree[i].weight < HTree[x].weight) {
                y = x;
                x = i;
            }
            else if ((x == y) || (HTree[i].weight < HTree[y].weight))
                y = i;
        }
}

void Huffman::code(int i, string newcode) {
    if (HTree[i].Lchild == -1) {
        Table[i].code = newcode;
        return;
    }
    code(HTree[i].Lchild, newcode + "0");
    code(HTree[i].Rchild, newcode + "1");


}

//chuangjian bianmacode chart
void Huffman::creatCodeTable() {
    code(2 * N - 2, "");
}


运行结果及报错内容

必须是可变值,以上是部分代码,代码报错部分在第106行,具体内容

void Huffman::code(int i, string newcode) {
    if (HTree[i].Lchild == -1) {
        Table[i].code = newcode;
        return;
    }
    code(HTree[i].Lchild, newcode + "0");
    code(HTree[i].Rchild, newcode + "1");


}

我的解答思路和尝试过的方法
我想要达到的结果
  • 写回答

1条回答 默认 最新

  • 昂格莱德 2022-05-09 22:46
    关注

    字符数组拷贝不能直接用=,Table[i].code的类型是char[100],用strcpy函数拷贝

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 2月3日
  • 已采纳回答 1月26日
  • 创建了问题 5月9日

悬赏问题

  • ¥20 c语言写的8051单片机存储器mt29的模块程序
  • ¥60 求直线方程 使平面上n个点在直线同侧并且距离总和最小
  • ¥50 java算法,给定试题的难度数量(简单,普通,困难),和试题类型数量(单选,多选,判断),以及题库中各种类型的题有多少道,求能否随机抽题。
  • ¥50 rk3588板端推理
  • ¥250 opencv怎么去掉 数字0中间的斜杠。
  • ¥15 这种情况的伯德图和奈奎斯特曲线怎么分析?
  • ¥250 paddleocr带斜线的0很容易识别成9
  • ¥15 电子档案元素采集(tiff及PDF扫描图片)
  • ¥15 flink-sql-connector-rabbitmq使用
  • ¥15 zynq7015,PCIE读写延时偏大