`

字符串压缩

 
阅读更多

题目描述:

       通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串压缩程序,将字符串中连续出席的重复字母进行压缩,并输出压缩后的字符串。
压缩规则:
1. 仅压缩连续重复出现的字符。比如字符串"abcbc"由于无连续重复字符,压缩后的字符串还是"abcbc".
2. 压缩字段的格式为"字符重复的次数+字符"。例如:字符串"xxxyyyyyyz"压缩后就成为"3x6yz"
要求实现函数:
void stringZip(const char *pInputStr,longlInputLen,char*pOutputStr);
【输入】pInputStr: 输入字符串
lInputLen: 输入字符串长度
【输出】pOutputStr: 输出字符串,空间已经开辟好,与输入字符
串等长;
【注意】只需要完成该函数功能算法,中间不需要有任何IO 的输入
输出
示例
输入:“cccddecc” 输出:“3c2de2c”
输入:“adef” 输出:“adef”
输入:“pppppppp” 输出:“8p”

 

自己写的程序版本1(有bug,当重复元素超过9个的时候无法表示。原因:一个char无法表示9以上的整数,因为超过9的就不是一位数了,两位数就是两个char了。)

#include "StdAfx.h"
#include "subStr.h"
#include<iostream>
using namespace std;

void stringZip(const char *pInputStr,long lInputLen,char * pOutputStr){
	int repeat=1;
	char temp[100];
	char *pOutputStrRuler=pOutputStr;
	int i;
	if(lInputLen==0)
	{
		printf("invalid parameters");
		return;
	}
	if(lInputLen==1){
		printf("%s\n",pInputStr);
		return;
	}
	for(i=0;i<lInputLen;i++)
	{
		if(pInputStr[i]==pInputStr[i+1] && (i+1)<lInputLen)
		{
			++repeat;
			continue;
		}
		if(repeat==1){
			*pOutputStrRuler=pInputStr[i];
			pOutputStrRuler++;
			repeat=1;
		}else{
			*pOutputStrRuler++='0'+repeat;
			repeat=1;
			*pOutputStrRuler++=pInputStr[i];
		}
	}
	*pOutputStrRuler='\0';

	printf("%s\n",pOutputStr);
}


int main(){
	
	char *pInputStr=(char *)malloc(20);
	char *pOutputStr=(char *)malloc(20);
	scanf("%s",pInputStr);
	stringZip(pInputStr,strlen(pInputStr),pOutputStr);
	system("pause");
	return 0;
}

 

再来看看版本二,应用到了函数sprintf(目标字符串,格式,参数们),解决了重复数大于9无法显示的bug:

我把修改的部分加个注释。

#include "StdAfx.h"
#include "subStr.h"
#include<iostream>
using namespace std;

void stringZip(const char *pInputStr,long lInputLen,char * pOutputStr){
	int repeat=1;
	char temp[100];
	//char *pOutputStrRuler=pOutputStr;
	int i;
	if(lInputLen==0)
	{
		printf("invalid parameters");
		return;
	}
	if(lInputLen==1){
		printf("%s\n",pInputStr);
		return;
	}
	memset(pOutputStr,0,sizeof(pOutputStr));
	for(i=0;i<lInputLen;i++)
	{
		if(pInputStr[i]==pInputStr[i+1] && (i+1)<lInputLen)
		{
			++repeat;
			continue;
		}
		if(repeat==1){
			//*pOutputStrRuler=pInputStr[i];
			//pOutputStrRuler++;

			sprintf(pOutputStr,"%s%c",pOutputStr,pInputStr[i]);  //add
			

			repeat=1;
		}else{
			//*pOutputStrRuler++='0'+repeat;
			//*pOutputStrRuler++=pInputStr[i];
			
			sprintf(pOutputStr,"%s%d%c",pOutputStr,repeat,pInputStr[i]); //add

			repeat=1;
			
		}
	}
	sprintf(pOutputStr,"%s\0",pOutputStr);  //add

	printf("%s\n",pOutputStr);
}


int main(){
	
	char *pInputStr=(char *)malloc(20);
	char *pOutputStr=(char *)malloc(20);
	scanf("%s",pInputStr);
	stringZip(pInputStr,strlen(pInputStr),pOutputStr);
	system("pause");
	return 0;
}

 

分享到:
评论

相关推荐

    delphi字符串压缩

    在IT行业中,字符串压缩是一种常见的优化技术,尤其是在Delphi编程环境下。Delphi是Pascal语言的一个强大版本,它提供了一套完整的开发工具,用于创建高效、高性能的应用程序。字符串压缩的目的是减小数据的存储空间...

    Code_笔试题_字符串压缩_

    标题中的“Code_笔试题_字符串压缩_”指的是一个与编程相关的笔试题目,重点在于实现字符串的压缩功能。这类问题通常出现在技术面试或招聘过程的笔试试题中,旨在考察应聘者的编程能力和对数据结构的理解。 描述中...

    VB.NET字符串压缩函数

    VB.NET写的字符串压缩函数,使用.NET的Compression写的。

    字符串压缩程序.rar

    在IT领域,字符串压缩是一种常见的数据压缩技术,用于减少存储空间和提高传输效率。这个名为“字符串压缩程序.rar”的压缩包包含了一个特定的程序代码,它利用了zip算法来实现字符串的压缩。对于初学者来说,这是一...

    字符串压缩与解压

    在IT领域,字符串压缩与解压是数据处理和存储中常见的技术。特别是在处理大量文本信息时,为了节省存储空间和提高传输效率,我们会对字符串进行压缩。本文将深入探讨C#语言中三种实现字符串压缩与解压的方法。 1. *...

    快速字符串压缩[快速字符串压缩]-精品源代码

    快速字符串压缩[快速字符串压缩]-精品源代码

    quicklz cocos2dx 压缩 字符串压缩

    QuickLZ是一款高效的开源压缩库,它在Cocos2d-x框架中被广泛用于字符串压缩。Cocos2d-x是一个跨平台的2D游戏开发框架,支持多种操作系统,包括iOS、Android、Windows等。字符串压缩在游戏开发中非常重要,因为它可以...

    string-yasuo.zip_字符串压缩

    在IT领域,字符串压缩是一种常见的数据处理技术,用于减少存储空间的需求,特别是在处理大量文本数据时。这个"string-yasuo.zip_字符串压缩"的压缩包文件似乎包含了一个专门用于字符串压缩的程序,旨在提高程序的...

    Python字符串压缩库Fivebit.zip

    Fivebit 是一个 Python 3 的短文本字符串压缩库,可将短的字符串压缩成 5 bit 编码,小写的 ASCII 可以压缩 37.5%。同时提供了一个字典用于最常用的英文单词(3个字母或者更长)。标点、数字和正常符号每个占用 10 ...

    Python123之字符串压缩#134865

    在Python编程语言中,字符串压缩是一个常见的操作,特别是在处理大量文本数据时,为了节省存储空间,我们会使用压缩算法。本节我们将深入探讨Python中的字符串压缩技术,并以标题"Python123之字符串压缩#134865"为...

    Java 字符串压缩和文件压缩代码

    在Java编程中,字符串压缩和文件压缩是常见的数据处理任务,尤其在大数据传输、存储优化等方面扮演着重要角色。本文将深入探讨Java中如何实现字符串和文件的压缩,以及涉及的相关技术。 首先,字符串压缩通常涉及到...

    C#中ICSharpCode.SharpZipLib字符串压缩

    对于字符串压缩,SharpZipLib提供了`GZipStream`和`DeflaterStream`类,分别用于GZip和ZIP格式的压缩。这里我们以GZip为例,演示如何压缩和解压缩字符串: ```csharp public static string CompressString(string ...

    字符串压缩解压缩.rar

    在IT领域,字符串压缩与解压缩是数据处理和存储中不可或缺的部分。ZLIB库是一个广泛使用的开源压缩库,尤其在处理文本数据时,它能够有效地减小文件的大小,提高传输效率,节省存储空间。本篇文章将深入探讨ZLIB库在...

    python字符串压缩.pdf

    在Python编程语言中,字符串压缩是一项重要的数据处理技术,它用于减少存储空间需求或在网络传输时减小数据量。Python提供了多种内置库和第三方库来实现字符串的压缩和解压缩功能。以下是关于Python字符串压缩的一些...

    C语言中压缩字符串的简单算法小结

    在C语言中,字符串压缩是一种将字符串转换为更紧凑形式的技术,常用于节省存储空间或提高数据处理效率。本文将重点介绍三种简单的字符串压缩算法,包括哈夫曼编码,以及它们在不同场景中的应用。 首先,最基础的...

    字符串的压缩和解压

    根据给定文件的信息,本文将围绕“字符串的压缩与解压”这一主题展开,深入探讨字符串压缩和解压的基本原理、实现方法以及应用场景等多方面内容。 ### 字符串压缩和解压概述 字符串的压缩与解压是计算机科学中的一...

    数据库课程设计—对带有大量重复单词的英文文本文件进行字符串压缩和解压缩处理

    这个设计项目的核心目标就是针对这样的文本文件进行有效的字符串压缩和解压缩操作,以节省存储空间并提高数据处理效率。在这个过程中,我们可以学习和应用多种计算机科学和信息技术中的关键概念。 首先,字符串压缩...

Global site tag (gtag.js) - Google Analytics