社区
C语言
帖子详情
用C语言压缩字符串
powerv1987
2010-02-01 12:44:53
问题是这样的,首先用C语言打开一个txt文件(这个文件里有一串0101这样的代码,可能有几个代码串,用空格或者回车分开),然后检测到连续N个(N>6)1或者0的时候,输出+N+(N个1)或者-N-(N个0),其他的字符不变,例如 000000010101(空格)1111111110000111 就输出 -7-10101(空格)+9+0000111到一个output.txt,这应该怎么写? 谢谢各位了啊
...全文
442
5
打赏
收藏
用C语言压缩字符串
问题是这样的,首先用C语言打开一个txt文件(这个文件里有一串0101这样的代码,可能有几个代码串,用空格或者回车分开),然后检测到连续N个(N>6)1或者0的时候,输出+N+(N个1)或者-N-(N个0),其他的字符不变,例如 000000010101(空格)1111111110000111 就输出 -7-10101(空格)+9+0000111到一个output.txt,这应该怎么写? 谢谢各位了啊
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
toborac
2010-02-01
打赏
举报
回复
这个代码没处理连续的空格或回车,要处理的话,把2楼if(N_cur > 6) {这句话改成
if((N_cur > 6) && ((*p_cur == '1') || (*p_cur == '0')) {
就可以了
toborac
2010-02-01
打赏
举报
回复
全部程序如下,为了省事就分配两个大buffer了,做的细一点可以一段一段的处理:
#include <stdio.h>
#include <stdlib.h>
/* 把上面2楼挪过来 */
int pack_str( char *in_str, char *out_str)
{
...
}
int main(int argc, char **argv)
{
char filename[128];
char *in, *out;
int file_len, out_len, i;
FILE *fp;
printf("Please enter file name: ");
scanf("%s", filename);
fp = fopen(filename, "rb");
if(fp == NULL) {
printf("Can't open file %s\n", filename);
exit(1);
}
fseek(fp, 0L, SEEK_END);
file_len = ftell(fp);
fseek(fp, 0L, SEEK_SET);
in = malloc(file_len+1);
if(in == NULL) {
printf("Can't allocate input buffer\n");
exit(2);
}
out = malloc(file_len+1);
if(out == NULL) {
printf("Can't allocate output buffer\n");
exit(3);
}
fread(in, 1, file_len, fp);
in[file_len] = '\0';
out_len = pack_str(in, out);
printf("Output is:\n");
for(i=0; i<out_len; i++) {
printf("%c", out[i]);
}
printf("\n");
return 0;
}
shellfish567
2010-02-01
打赏
举报
回复
你这个该4位一压缩,按16进制
toborac
2010-02-01
打赏
举报
回复
/*
* in_str: input raw string
* out_str: output packed string
* return: output string length
* 调用者负责读入文件 把读取的源字符串作为in_str,并负责输出字符串out_str的分配和释放
* 为节省内存,建议调用者扫描空格或回车分隔符,一段一段来调用
*/
int pack_str( char *in_str, char *out_str)
{
int in_len = strlen(in_str);
int out_len = 0;
char *p_in = in_str, *p_out = out_str;
char *p_cur = NULL;
int i, N_cur = 0;
while(1) {
if(*p_in != '\0') {
if(p_cur == NULL) {
p_cur = p_in;
N_cur = 1;
p_in++;
continue;
}
if(*p_in == *p_cur) {
N_cur++;
p_in++;
continue;
}
}
if(N_cur > 6) {
if(*p_cur == '1') {
*p_out++ = '+';
*p_out++ = '0' + N_cur;
*p_out++ = '+';
} else {
*p_out++ = '-';
*p_out++ = '0' + N_cur;
*p_out++ = '-';
}
out_len += 3;
} else {
for(i=0; i<N_cur; i++) {
*p_out++ = *p_cur;
}
out_len += N_cur;
}
p_cur = p_in;
N_cur = 1;
if(*p_in != '\0') {
break;
}
return out_len;
}
guoyu_bo
2010-02-01
打赏
举报
回复
设置个计数器来统计个数
大于6了就转到压缩模式
C语言
字符串
快速
压缩
算法代码
这个算法体现了
C语言
中对
字符串
的基本操作,包括字符数组的使用、
字符串
函数(如`strlen`)的调用以及自定义
字符串
处理逻辑。同时,它也展示了如何处理多种情况和数据类型之间的转换,这些都是
C语言
编程中的基础技能...
C语言
中
压缩
字符串
的简单算法小结
在
C语言
中,
字符串
压缩
是一种将
字符串
转换为更紧凑形式的技术,常用于节省存储空间或提高数据处理效率。本文将重点介绍三种简单的
字符串
压缩
算法,包括哈夫曼编码,以及它们在不同场景中的应用。 首先,最基础的...
C语言
–
压缩
字符串
压缩
字符串
给定一组字符,使用原地算法将其
压缩
。
压缩
后的长度必须始终小于或等于原数组长度。 数组的每个元素应该是长度为1 的字符(不是 int 整数类型)。 在完成原地修改输入数组后,返回数组的新长度。 示例1...
哈夫曼
压缩
解压算法-
C语言
它的主要原理是基于字符出现频率构建最优的二叉树,进而为每个字符生成最短的唯一编码,使得常用字符在编码过程中占用更少的位数,从而达到
压缩
数据的目的。在解
压缩
时,通过读取这些编码来恢复原始数据。
C语言
作为...
c语言
字符串
数组和特殊矩阵.ppt
正确使用这些函数,可以高效地进行
字符串
处理。
C语言
中,特殊矩阵的处理要依赖于矩阵的特性和应用场景,可能会设计到特定的算法。例如,对于稀疏矩阵,为了节约存储空间和提高运算效率,通常采用
压缩
存储技术,如...
C语言
70,026
社区成员
243,262
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章