C语言的问题,请大家一定要帮帮我好吗??
#include "stdafx.h"
#include<stdio.h>
#include <string.h>
#define max 27
#define wmax 32767
typedef struct
{
char data;
int weight;
int parent;
int left;
int right;
} huffnode;
void initTree(huffnode *phuff,char* pdata,int *pweight,int n)
{
huffnode *p=phuff;
for(int i=0;i<2*n-1;i++)
{
p->left=p->right=p->parent=-1;
p++;
}
p=phuff;
for(int j=0;j<n;j++)
{
p->weight=*pweight;
p->data=*pdata;
p++;
pweight++;
pdata++;
}
for(int k=n;k<2*n-1;k++)
{
phuff[k].weight=wmax;
}
}
void bulidTree(huffnode *phuff,int n)
{
int n1,n2;
int i=0,j=0;
int n2b;
for(j=n;j<2*n-1;j++)
{
/*从节点集合中取出没有父节点的两个最小权重的节点,存入n1,n2*/
for(i=0;i<2*n-2;i++)
{
if(phuff[i].parent==-1)
{
n1=i;
break;
}
}
for(i=n1+1;i<2*n-2;i++)
{
if(phuff[i].parent==-1)
{
n2=i;
i++;
break;
}
}
n2b=n2;
if(phuff[n1].weight>phuff[n2].weight)
{
int temp;
temp=n1;
n1=n2;
n2=n1;
}
for(i=n2b+1;i<2*n-2;i++)
{
if(phuff[i].parent==-1)
{
/*注意这里的比较条件*/
if((phuff[i].weight>=phuff[n1].weight)&&(phuff[i].weight<phuff[n2].weight))
{
n2=i;
}
if(phuff[i].weight<phuff[n1].weight)
{
n2=n1;
n1=i;
}
}
}
/*这里正式产生树结构*/
phuff[n1].parent=phuff[n2].parent=j;
phuff[j].weight=phuff[n1].weight+phuff[n2].weight;
phuff[j].left=n1;
phuff[j].right=n2;
}
}
void huffEncode(char ch,huffnode* phuff,int n,char *out)
{
int index=-1;
int parent,pos=0;
for(int i=0;i<n;i++)
{
if(phuff[i].data==ch)
{
index=i;
break;
}
}
if(index==-1)
{
printf("\nchar--%c invalid!\n",ch);
return;
}
parent=phuff[index].parent;
while(parent!=-1)
{
if(phuff[parent].left==index){ out[pos++]='0';}
else{ out[pos++]='1';}
index=parent;
parent=phuff[parent].parent;
}
out[pos]='\0';
strrev(out);
}
void huffEncodeString(char *pch,huffnode* phuff,int n,char *out)
{
int pos=0;
int pos1=0;
char out1[20];
while(pos<int(strlen(pch)))
{
huffEncode(pch[pos],phuff,n,out1);
pos1+=strlen(out1);
if(pos==0)
{
strcpy(out,out1);
}
else
{
strcat(out,out1);
}
pos++;
}
out[pos1]='\0';
}
void huffDecode(char *pch,huffnode* phuff,int n,char *out)
{
int pos=0;
int root=-1,node;
int pos1=0;
for(int i=0;i<2*n-1;i++)
{
if(phuff[i].parent==-1)
{
root=i;
break;
}
}
while(pos<int(strlen(pch)))
{
node=root;
while( (phuff[node].left!=-1) && (phuff[node].right!=-1))
{
if(pch[pos]=='0')
{
node=phuff[node].left;
}
else
{
node=phuff[node].right;
}
pos++;
}
out[pos1++]=phuff[node].data;
}
out[pos1]='\0';
}
int main()
{
huffnode ht[2*max-1];
int n=5;
char data[5]={'a','b','c','d','e'};
int j;
int weight[5]={1,2,4,5,7};
char out[200];
initTree(ht,data,weight,n);
bulidTree(ht,n);
printf("正在编码...\n");
huffEncodeString("abcde",ht,n,out);//这里的引号是怎么回事啊??,怎么样才能把我从屏幕上输入并放在数组里面的数放到引号里面
printf(" 编码完成,答案是-->%s\n",out);
printf("--------------------------------\n");
printf("正在译码 ...\n");
huffDecode("000001011011",ht,n,out);//还有这里,我怎么样才能把上面产生的结果直接放到引号里面,
printf("译码完成,结果是-->%s\n",out);
return 0;
}
我的问题是怎么样才能把我从屏幕上导入的数组放到引号里面,比如,我现在只能对abcde进行编码,但是如果
我想从对屏幕上输入并保存在数组里面的数进行编码,请问我该怎么做??,通理,译码也是这个问题
...全文
相关推荐
《你必须知道的495个C语言问题》
"《你必须知道的495个C语言问题》是针对C语言学习者和使用者的一本问答式参考书,涵盖了C语言中声明、初始化、数组、指针、字符串、内存分配、库函数、C预处理器等多个方面的问题。书中通过495个经典问
C语言——迷宫问题
迷宫问题本质上本质上是对数组的一个遍历,向上下左右四个方向进行遍历。当上下左右四个方向都无法行动时,将路径进行回溯,找到另一个可以行动的方向,直到找到出口。
C语言常见面试问题及答案总结
"C语言常见面试问题及答案总结"在C语言面试中,了解基础概念、语法特性和数据结构是至关重要的。以下是对标题和描述中提及的一些知识点的详细解释:1. 关键字`static`的作用: - 函
迷宫 c语言迷宫问题
以上是针对“迷宫 c语言迷宫问题”所涉及的主要知识点和技术细节。通过理解和掌握这些知识点,可以有效地解决类似的迷宫问题。
c语言程序100列(学会用c语言解决生活中的问题)
在编程世界里,C语言是一门基础且强大的编程语言,它以其简洁的语法和高效的执行能力深受程序员喜爱。"C语言程序100列"是一个旨在帮助初学者掌握C语言并将其应用于实际问题解决的学习资源。


