经典例题 字符串压缩详解

简介: 经典例题 字符串压缩详解

任务描述


 字符串压缩,某个字符 x 在字符串中连续出现 n(n>1) 次,则将这 n 个字符替换为 "nx" 的形式;否则保持不变,如:Mississippi==>Mi2si2si2pi


输入


 输入 1 个字符串。


输出


  输出压缩后的字符串。


测试说明


测试用例


 输入:    Mississippi   输出:    Mi2si2si2pi



#include<stdio.h>
void cyr(char *p);
int main()
{
    int i,n;
    char p[100];
    gets(p);
    cyr(p);
    puts(p);
    return 0;
}
void cyr(char *p)
{
    int i,n;//定义变量n用来记录重复字符的个数
    char *q=p;//定义指针变量
    while(*p!='\0')//当数组不到最后一位时
    {
        n=1;//需要注意的是,这里的n=1不能放在while之前,那样的话记录下一字符时无法清零
        while(*p==*(p+n))//当当前字符和下一字符相等时
        {
            n++;
        }
        }
        if(n>=2)
        {
            *q++=n+'0';//这里是转化为字符型
        }
        *q++=*(p+n-1);//这里是将字母放在数字后面,如果不加的话就只有重复的次数而没有字符
        p=p+n;//跳跃到重复字符截止的地方,开始统计下一个字符
    }
    *q='\0';//结束标志
}
 while(*p==*(p+n))
        {
            n++;
        }

需要注意的是,这里while中*(p+n)的括号不可以省略


相关文章
|
算法 Java 索引
【洛谷算法题】P5704-字母转换【入门1顺序结构】
【洛谷算法题】P5704-字母转换【入门1顺序结构】
|
算法 测试技术 C#
C++算法前缀和的应用:分割数组的最大值的原理、源码及测试用例
C++算法前缀和的应用:分割数组的最大值的原理、源码及测试用例
|
6月前
|
C语言
c语言编程练习题:7-56 求给定精度的简单交错序列部分和
c语言编程练习题:7-56 求给定精度的简单交错序列部分和
86 0
|
11月前
|
算法 测试技术 C#
C++前缀和算法的应用:分割数组的最多方案数 原理源码测试用例
C++前缀和算法的应用:分割数组的最多方案数 原理源码测试用例
|
机器学习/深度学习 存储
【每日易题】求二进制中1的个数——三种非常巧妙的解题思路
【每日易题】求二进制中1的个数——三种非常巧妙的解题思路
77 0
|
程序员
【Leetcode】面试题 01.06. 字符串压缩、面试题 05.07. 配对交换
目录 面试题 01.06. 字符串压缩: 面试题 05.07. 配对交换
37 0
Leecode 面试题 01.06. 字符串压缩
Leecode 面试题 01.06. 字符串压缩
43 0
|
存储 算法 前端开发
前端算法-颠倒二进制
前端算法-颠倒二进制
|
机器人
【Day14】LeetCode力扣(解题思路+详细注释)[面试题 01.02.判定是否互为字符重排] [62. 不同路径 ] [205. 同构字符串 ]
学习[面试题 01.02.判定是否互为字符重排] [62. 不同路径 ] [205. 同构字符串 ]。
139 0
【Day14】LeetCode力扣(解题思路+详细注释)[面试题 01.02.判定是否互为字符重排] [62. 不同路径 ] [205. 同构字符串 ]
LeetCode 90子集Ⅱ&91解码方法
给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。
121 0
LeetCode 90子集Ⅱ&91解码方法