网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
07月29日漏签0天
c++吧 关注:626,368贴子:2,112,671
  • 看贴

  • 图片

  • 吧主推荐

  • 游戏

  • 首页 上一页 1 2 3 下一页 尾页
  • 87回复贴,共3页
  • ,跳到 页  
<<返回c++吧
>0< 加载中...

回复:C++高手,目前工作于XX公司,免费回答问题,欢迎楼下跟帖

  • 只看楼主
  • 收藏

  • 回复
  • 恶灵丶魔化
  • &&
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
学好后工资大概多少


  • LLYNOSY
  • =
    2
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
大神还在?


2025-07-29 05:26:32
广告
不感兴趣
开通SVIP免广告
  • 人渣中的极品0
  • ,
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
大神,请教一下对二进制文件的写入用 << 与 用函数write() 有什么区别?


  • candys摩羯
  • throw
    3
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
楼主在吗在吗


  • 世上无敌超级帅
  • ||
    5
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
拜托楼主能帮忙写个程序吗,编写程序实现简单四则表达式运算,例如输入1+2-3*5 输出-12


  • CsdkeNero
  • |
    7
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
lz是win的还是Linux


  • 罒Similar
  • throw
    3
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
已私聊


  • 纳天为妾
  • <
    11
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
QT掌握到什么程度才能混碗饭吃?目前在培训,很迷茫啊


2025-07-29 05:20:32
广告
不感兴趣
开通SVIP免广告
  • 落地噢喝
  • <
    11
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
羡慕高手


  • HHHHan
  • ,
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
请帮忙看一下怎么改好吗,原本好好的,不知道为什么就不能用啦,后天就要交啦,我一直都改不对
#include <string>
/***********************数据结构***********************/
//哈弗曼树节点
typedef struct{
unsigned int weight;
unsigned int parent;
unsigned int lchild;
unsigned int rchild;
}HuffTreeNode, *HuffTree;
//字符-权值-编码映射
typedef struct{
char c;
unsigned int weight;
char *code;
}CharMapNode, *CharMap;
/*************************类定义****************************/
class Huffman{
private:
void select(int n, int &s1, int &s2);
HuffTree huffTree; //哈弗曼树
CharMap chars; //字符表
int n; //字符数
std::string text; //原文
std::string code; //编码
public:
void InputCharsWeight();
void CountCharsWeight();
void Decode();
void ReadTextFromFile(char *filename);
void ReadCodeFromFile(char *filename);
void SaveTextToFile(char *filename);
void SaveCodeToFile(char *filename);
void PrintCode();
void MakeCharMap();
void PrintText();
void PrintCharCode();
void PrintCharWeight();
void SetCharMap(CharMap m, int number);
void Encode();
Huffman();
virtual ~Huffman();
};
#include "b.h"
#include <iostream>
#include <fstream>
#include<cstring>
using namespace std;
Huffman::Huffman(){
huffTree = NULL;
chars = NULL;
n = 0;
}
Huffman::~Huffman(){}
//对Text串进行哈弗曼编码
void Huffman::Encode(){
code = "";
for (string::size_type i = 0; i != text.size(); ++i){
for (int j = 1; j <= n; ++j)
if (chars[j].c == text[i])
code += chars[j].code;
}
}
//设置字符表
void Huffman::SetCharMap(CharMap m, int number){
chars = m;
n = number;
}
//在huffTree[1..n]中选择parent为0且weight最小的两个节点,其序号为s1,s2
void Huffman::select(int n, int &s1, int &s2){
s1 = s2 = 0;
for (int i = 1; i <= n; ++i){
if (huffTree[i].parent != 0)
continue;
if (s1 == 0)
s1 = i;
else if (s2 == 0){//此处采用的策略,使得整个过程中s1的权值小于s2的权值
if (huffTree[i].weight < huffTree[s1].weight){
s2 = s1;
s1 = i;
}
else
s2 = i;
}
else{
if (huffTree[i].weight < huffTree[s1].weight)
{
s2 = s1;
s1 = i;
}
else if (huffTree[i].weight < huffTree[s2].weight)
s2 = i;
}
}
}
void Huffman::PrintCharWeight(){
for (int i = 1; i <= n; ++i){
switch (chars[i].c){
case '/t':
cout << "//t";
break;
case '/n':
cout << "//n";
break;
default:
cout << chars[i].c;
break;
}
cout << "——" << chars[i].weight << endl;
}
}
void Huffman::PrintCharCode(){
for (int i = 1; i <= n; ++i){
switch (chars[i].c){
case '/t':
cout << "//t";
break;
case '/n':
cout << "//n";
break;
default:
cout << chars[i].c;
break;
}
cout << "——" << chars[i].code << endl;
}
}
//输出文本串
void Huffman::PrintText(){
cout<< text << endl;
}
//输出0-1编码
void Huffman::PrintCode(){
cout << code << endl;
}
//根据各字符的权值建立字符-编码表
void Huffman::MakeCharMap(){
if (n <= 1)
return;
int m = 2 * n - 1; //哈弗曼树所需节点数
huffTree = new HuffTreeNode[m + 1]; //0号单元未使用
int i;
for (i = 1; i <= n; ++i){
huffTree[i].weight = chars[i].weight;
huffTree[i].parent = 0;
huffTree[i].lchild = 0;
huffTree[i].rchild = 0;
}
for (i = n + 1; i <= m; ++i){
huffTree[i].weight = 0;
huffTree[i].parent = 0;
huffTree[i].lchild = 0;
huffTree[i].rchild = 0;
}
//建哈弗曼树
for (i = n+1; i <= m; ++i){
int s1, s2;
select(i - 1, s1, s2);
huffTree[s1].parent = huffTree[s2].parent = i;
huffTree[i].lchild = s1;
huffTree[i].rchild = s2;
huffTree[i].weight = huffTree[s1].weight + huffTree[s2].weight;
}
//从叶子到根节点逆向求每个字符的哈弗曼编码
char *cd;
cd=new char[n]; //分配求编码的工作空间(每个字符编码结果最长n-1再加上'/0')
cd[n - 1] = '/0'; //编码结束符
for (i = 1; i <= n; ++i) //逐个字符求哈弗曼编码
{
int start = n - 1;
int c, f;
//从叶子到根逆向求编码
for (c = i, f = huffTree[i].parent; f != 0; c = f, f = huffTree[f].parent)
{
if (huffTree[f].lchild == c) //左孩子编码为0
cd[--start] = '0';
else //右孩子编码为1
cd[--start] = '1';
}
chars[i].code = new char[n - start]; //为第i个字符编码分配空间
strcpy_s(chars[i].code,n,&cd[start]);
}
delete[] cd;
}//从文件读入原文
void Huffman::ReadTextFromFile(char *filename){
ifstream infile(filename);
if (!infile)
{
cout << "无法打开文件!" << endl;
return;
}
char c;
while (infile.get(c)){
text += c;
}
}
//将编码存入文件
void Huffman::SaveCodeToFile(char *filename){
ofstream outfile(filename);
if (!outfile){
cout << "保存文件出错!" << endl;
return;
}
outfile << code;
}
//从文件读入编码
void Huffman::ReadCodeFromFile(char *filename){
ifstream infile(filename);
if (!infile){
cout << "无法打开文件!" << endl;
return;
}
infile >> code;
}
//将0-1编码串解码
void Huffman::Decode(){
text = "";
string::size_type i, count;
for (i = 0; i < code.size(); i += count){
//每个字符的编码结果最长n-1,从1至n-1依次尝试
for (count = 1; count < n; ++count){
for (int j = 1; j <= n; ++j)
if (code.substr(i, count) == chars[j].code){
text += chars[j].c;
goto next;
}
}
next:;
}
}
//统计原文中各字符的权值
void Huffman::CountCharsWeight(){
if (text.empty())return;
if (chars != NULL)delete[] chars;
int i = 0;n = 0;
chars = new CharMapNode[2];
chars[1].c = text[i];
chars[1].weight = 1; ++n;
for (i = 1; i != text.size(); ++i){
int j;
for (j = 1; j <= n; ++j){ //遍历当前字符表,如果已存在该字符,权值+1
if (text[i] == chars[j].c){
++chars[j].weight;
break;
}
}
if (j > n){ //该字符不存在,添加该字符
++n;
CharMap newchars = new CharMapNode[n + 1];
memcpy(newchars, chars, n * sizeof(CharMapNode));
delete[] chars;
chars = newchars;
chars[n].c = text[i];
chars[n].weight = 1;
}
}
}
//输入字符和对应权值
void Huffman::InputCharsWeight(){
cout << "请输入字符集大小n(n>1):" << endl;
cin >> n;
if (chars != NULL)
delete[] chars;
chars = new CharMapNode[n + 1]; //0号单元未使用
cout << "请输入字符和权值:" << endl;
for (int i = 1; i <= n; ++i){
cin.ignore(); //清除输入缓冲区
cin.get(chars[i].c); //输入单个字符,可以是空白符
cin >> chars[i].weight;
}
}
void Huffman::SaveTextToFile(char *filename){
ofstream outfile(filename);
if (!outfile){
cout << "保存文件出错!" << endl;
return;
}
outfile << text;
}
#include <iostream>
#include "b.h"
using namespace std;
int main(){
Huffman huffman;
huffman.ReadTextFromFile("text.txt");
/****************第一步输入字符和对应权值******************/
cout << "请选择: 1.程序自动统计字符和权值(推荐) 2.用户输入" << endl;
int r;
do{
cin >> r;
}while ((r != 1) && (r != 2));
if (r == 1)
huffman.CountCharsWeight();
else
huffman.InputCharsWeight();
cout << "字符及对应权值:" << endl;
huffman.PrintCharWeight();
//system("pause");
cout << endl;
/****************第二步建哈弗曼树,输出字符与编码的对应关系******************/
huffman.MakeCharMap();
cout << "字符及对应编码:" << endl;
huffman.PrintCharCode();
cout << endl;
/****************第三步对字符进行编码,将结果输出并存入文件******************/
cout << "对原文进行编码:" << endl;
cout << "原文:" << endl;
huffman.PrintText();
huffman.Encode();
cout << "编码:" << endl;
huffman.PrintCode();
huffman.SaveCodeToFile("code.txt");
cout << endl;
/****************第四步从文件读入0、1代码串解码后输出并存入文件******************/
cout << "对编码进行解码:" << endl;
huffman.ReadCodeFromFile("code.txt");
cout << "编码:" << endl;
huffman.PrintCode();
huffman.Decode();
cout << "原文:" << endl;
huffman.PrintText();
huffman.SaveTextToFile("resulttext.txt");
return 0;
}


  • HHHHan
  • ,
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
是哈夫曼编码问题,错误


  • 梦幻般地爱
  • ,
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
课设可以帮忙修改嘛?或者你觉得我的不好直接重做一个


  • 星空下的云110
  • <
    11
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
求大神帮我写推箱子 贪吃蛇 打地鼠等等各种小游戏的程序现在这里,谢谢了!!!!


  • 撘不搭
  • &&
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
wj_wb.open("test.dat", ios::out|ios::in|ios::app);
if (!wj_wb.fail())
{
//wj_wb.clear();
wj_wb.seekp(0,ios::beg);
cin >> sj;
wj_wb << sj << endl;
wj_wb.close();
}
请问大神 这里的seekp(0,ios::beg)为什么不能将指针从文件尾移动到文件头啊 就是清空了标志也不行 最后追加的时候 还是在文件尾追加的 我用的是VS2013 求大神指教 到底怎样用seekp才能把指针移动到文件头进行追加啊!


2025-07-29 05:14:32
广告
不感兴趣
开通SVIP免广告
  • 金鱼咩咩
  • throw
    3
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
楼主,求助


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 首页 上一页 1 2 3 下一页 尾页
  • 87回复贴,共3页
  • ,跳到 页  
<<返回c++吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示