通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串压缩程序,将字符串中连续出席的重复字母进行压缩,并输出压缩后的字符串。

本文介绍了一种C++实现的字符串压缩方法,通过检查连续出现的重复字符并记录其数量,将字符串‘xxxyyyyyyz’压缩为‘3x6yz’。代码中存在一个问题,当重复字符超过9个时,输出的计数字符会变成ASCII码的冒号和分号等。作者期待能有改进方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

华为笔试题目:通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串压缩程序,将字符串中连续出席的重复字母进行压缩,并输出压缩后的字符串。
压缩规则:
    1、仅压缩连续重复出现的字符。比如字符串"abcbc"由于无连续重复字符,压缩后的字符串还是"abcbc"。

    2、压缩字段的格式为"字符重复的次数+字符"。例如:字符串"xxxyyyyyyz"压缩后就成为"3x6yz"。

这里我是用C++语言实现的:

#include<iostream>
#include<cstring>
using namespace std;
int main(){
char str[100];//定义input字符串
char new_str[100]; //定义output字符串
cin.getline(str,100);//输入
int k = 0;//记录新字符串的index
for(int i = 0; i < strlen(str) ; i++ ){
char temp = str[i];
int i_temp = i ;
int j = 1;
while (i < strlen(str) ){
if (str[++i_temp] != temp)
{
break;//若后一个字符与当前字符不同,直接break
}
    else
j++;    //记录字符相同的个数
}
if ( j > 1){//判断个数是否大于0
new_str[k++] = '0'+j; //把整型数转成字符
new_str[k++] = str[i];
i = i +( --j);//input字符串下标应置为i +( --j)
}
else
new_str[k++] = str[i];


}
new_str[++k] = '\0'; //新字符串尾部加多个字符串结束符
cout<<new_str<<endl;
return 0;
}


PS:这里有个问题,若相同字符超过了9,那么由于输出的是ASCII码,当相同字符为10个时,便会输出“:”,11个时,输出为“;”。。。

  希望大神给予改进建议,谢谢。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值