腾讯笔试题是c语言吗,腾讯面试C语言题

本文介绍了一种使用C语言实现的字符串压缩算法,通过统计字符连续出现的次数并进行压缩,适用于字符重复较多的情况。

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

题目大致要求:

给定一个字符串,如 aaabbccildf....,让你压缩一下这个字符串,方法是计算每次字符连续出现的次数,若大于1则存该字符出现的次数+该字符,若等于1

则只存该字符,如上面的解答为:3a2b2cildf...,用C语言编写这个程序

我的程序:

#include "stdio.h"

#include "string.h"

int main(){

char str[1000],comprise[1000];//str为源字符串,comprise为压缩的字符串

scanf("%s", str);

int i,j = 0,times = 0,len = strlen(str);

char temp = '#', math[32];

for(i = 0;i < len;i++){// 遍历整个字符串

//当当前的字符与上一个字符temp不同时或者其下一个字符时结束符'\0'时

//开始进行对数字的处理

//处理方式是先把次数times如果大于0,则处理数字,将数字存入字符串,

//需要注意的是大于10的数得用多位来存,所以有一个取余后除以10的做法

if(str[i] != temp || str[i + 1] == '\0'){

if(times != 0){//等于0则表示没有统计过字符,即刚开始

if(times == 1){

comprise[j] = temp;

times = 0;

j++;

} else if(times > 1){

int k = 0;

while(times != 0){//这里将times的每一位分离,但存的时候是从0开始的

math[k] = times % 10 + '0';

times = times / 10;

k++;

}

for(k = k - 1;k>=0;k--){//需把数字倒过来

comprise[j] = math[k];

j++;

}

comprise[j] = temp;

j++;

}

}

temp = str[i];//将当前字符存起来,以供与下一个字符比较

times++;//因为本次就不同,应该加一

} else {

times++;

}

}

comprise[j] = '\0';//最后结束压缩的字符串

printf("The orgin string: %s\n", str);

printf("The comprised string: %s\n", comprise);

return 0; 注意:这里得考虑当次数大于9的时候,应该将数字分离为单个数字,存入压缩的字符串

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值