经典例题 字符串压缩详解

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

任务描述


 字符串压缩,某个字符 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)的括号不可以省略


相关文章
|
2天前
|
机器学习/深度学习 算法 C语言
【编码狂想】深度探索C++编程之旅:“数组、字符串、函数与KMP算法解密“
【编码狂想】深度探索C++编程之旅:“数组、字符串、函数与KMP算法解密“
75 0
|
6月前
|
机器学习/深度学习 存储
【每日易题】求二进制中1的个数——三种非常巧妙的解题思路
【每日易题】求二进制中1的个数——三种非常巧妙的解题思路
39 0
|
7月前
|
程序员
【Leetcode】面试题 01.06. 字符串压缩、面试题 05.07. 配对交换
目录 面试题 01.06. 字符串压缩: 面试题 05.07. 配对交换
21 0
|
9月前
LeetCode150道面试经典题--最后一个单词的长度(简单)
给你一个字符串 s,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。
30 0
|
10月前
|
存储 算法
带你刷算法——数组/字符串的完全掌握(一)(上)
带你刷算法——数组/字符串的完全掌握(一)
|
10月前
|
存储 算法 Java
带你刷算法——数组/字符串的完全掌握(一)(中)
带你刷算法——数组/字符串的完全掌握(一)
|
10月前
|
存储 算法 Java
带你刷算法——数组/字符串的完全掌握(一)(下)
带你刷算法——数组/字符串的完全掌握(一)
|
11月前
Leecode 面试题 01.06. 字符串压缩
Leecode 面试题 01.06. 字符串压缩
30 0
|
11月前
|
算法 索引
LeetCode算法小抄--二分查找及其变体形式
LeetCode算法小抄--二分查找及其变体形式
|
算法 JavaScript 前端开发
日拱算法:双指针解“压缩字符串”
给你一个字符数组 chars ,请使用下述算法压缩: 从一个空字符串 s 开始。对于 chars 中的每组 连续重复字符 : 如果这一组长度为 1 ,则将字符追加到 s 中。 否则,需要向 s 追加字符,后跟这一组的长度。 压缩后得到的字符串 s 不应该直接返回 ,需要转储到字符数组 chars 中。需要注意的是,如果组长度为 10 或 10 以上,则在 chars 数组中会被拆分为多个字符。 请在 修改完输入数组后 ,返回该数组的新长度。