腾讯面试C语言题

来源:互联网 发布:js window.event对象 编辑:程序博客网 时间:2024/05/18 03:44

题目大致要求:

给定一个字符串,如 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的时候,应该将数字分离为单个数字,存入压缩的字符串
原创粉丝点击