题目:

通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串压缩程序,将字符串中连续出席的重复字母进行压缩,并输出压缩后的字符串。
压缩规则:
    1、仅压缩连续重复出现的字符。比如字符串"abcbc"由于无连续重复字符,压缩后的字符串还是"abcbc"。
    2、压缩字段的格式为"字符重复的次数+字符"。例如:字符串"xxxyyyyyyz"压缩后就成为"3x6yz"。
要求实现函数: 
     void stringZip(const char *pInputStr, long lInputLen, char *pOutputStr);
    输入pInputStr:  输入字符串lInputLen:  输入字符串长度
    输出 pOutputStr: 输出字符串,空间已经开辟好,与输入字符串等长;
注意:只需要完成该函数功能算法,中间不需要有任何IO的输入输出
示例 
    输入:“cccddecc”   输出:“3c2de2c”
    输入:“adef”     输出:“adef”
    输入:“pppppppp” 输出:“8p”

分析:

将输入字符串拆分成多段,连续相同的字符串归为一段。

用标志位记录游标的位置,是指指向每一段字符串的第一个字母,如果后面字符跟它相同,则sameNum+1;如果不同,则标志位+1。

如果sameNum的值为1,表示一个字符相同,则只输出该字符,flag+1;否则,表示多个字符相同,则输出相同数量和该字符,flag+2。

注意:输出相同字符数量时,要进行ASCII码转换!

算法代码:

void stringZip(const char *pInputStr, long lInputLen, char *pOutputStr)
{int sameNum = 1;int outputFlag = 0;for (int i = 0; i < lInputLen; ++i) {if (pInputStr[i+1] == pInputStr[i]) {sameNum++;}else{if (1 == sameNum) {pOutputStr[outputFlag] = pInputStr[i];outputFlag++;}else{pOutputStr[outputFlag] = char(sameNum+48);pOutputStr[outputFlag+1] = pInputStr[i];outputFlag += 2;sameNum = 1;}}}
}

测试代码:

//
//  main.cpp
//  stringZip
//
//  Created by Jiajie Zhuo on 2017/4/1.
//  Copyright © 2017年 Jiajie Zhuo. All rights reserved.
//#include <iostream>using namespace std;void stringZip(const char *pInputStr, long lInputLen, char *pOutputStr);int main(int argc, const char * argv[]) {long lInputLen;cout << "Please enter the lInputLen: ";cin >> lInputLen;char *pInputStr = new char[lInputLen];char *pOutputStr = new char[lInputLen];cout << "Please enter the LnputStr: ";cin >> pInputStr;stringZip(pInputStr, lInputLen, pOutputStr);cout << "OutputStr is: ";cout << pOutputStr << endl;return 0;
}

考察了对字符串操作的掌握情况,还有游标的灵活使用。

华为面试题——压缩字符串相关推荐

  1. 牛客网华为机试题(JavaScript)

    最近在牛客网刷华为机试题,遇到了很多坑,记录: 每一道题目都经过自己实践验证 华为机试题 牛客网在javascript V8引擎下处理输入输出如下: 利用了readline()接收输入的每一行,多行处 ...

  2. 【华为机试题分析】 4 字符串分割

    我的首发平台是公众号[CodeAllen],学习交流QQ群:736386324,本文版权归作者所有,转载请注明出处 [华为机试题分析] 4 字符串分割 #include <stdio.h> ...

  3. 【leetcode】第394题:字符串解码(华为笔试题)

    题目:给定一个经过编码的字符串,返回它解码后的字符串. 编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次.注意 k 保证为正整数. ...

  4. 华为电脑c语言总是错误,关于华为机试题求代码!解决方法

    关于华为机试题求代码!!! n个字符串,1 如n=3 1.what is local bus? 2.this is local bus. 3.local bus is name sdhfj. 那么最长 ...

  5. 【牛客网】华为机试题(00、C++版本)

    华为机试题,本来以为对一些基础的程序还是有点信心的:不过不练不知道,一练吓一跳.平时虽然也都码程序,但是一到机试题就各种乱七八的不适应.还是要加强一下练习. 1.字符串最后一个单词的长度 题目描述:计 ...

  6. C语言面试题大汇总之华为面试题 Eddy整理

    1.局部变量能否和全局变量重名? 答:能,局部会屏蔽全局.要用全局变量,需要使用"::" ;局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局 ...

  7. 华为机试题库+题解【C语言版】

    文章目录 前言 1.字符串最后一个单词的长度[***] 描述 输入描述 输出描述 示例 解题代码 2.计算某字符出现次数[****] 描述 输入描述 输出描述 示例 解题代码 3. 明明的随机数[** ...

  8. 华为机试python编程题_牛客网华为机试题之Python解法

    牛客网华为机试题之Python解法 第1题 字符串最后一个单词的长度 a = input().split(" ") print(len(a[-1])) 第2题 计算字符个数 a = ...

  9. 【华为机试题分析-C/C++】知识点分类总结

    专栏地址:https://blog.csdn.net/super828/category_10825347.html 字符串 [华为机试题分析] 1 字符串最后一个单词的长度 [华为机试题分析] 2 ...

  10. 细节决定成败!华为面试题库刷题整理(三)

    写在前面 华为面试题库刷题第三次整理. 203. 移除链表元素 删除链表中等于给定值 val 的所有节点. 示例: 输入: 1->2->6->3->4->5->6, ...

最新文章

  1. 在Mybatis3开发中与配置相关的7点体会
  2. golan web扫雷
  3. 有些话不知道怎么说才好
  4. c语言指针字符串逆序存放,C语言指针实现字符串的反转
  5. SSM框架下log4j的配置和使用
  6. uniapp 开发基础环境搭建和配置
  7. 关闭ie烦人的提示信息
  8. linux 下pycharm 无法输入中文
  9. web安全day10:通过实验理解windows域的OU和GPO
  10. java数据类型int_java数据类型
  11. 新版gsp计算机系统全套资料,新版GSP对计算机系统的需求表
  12. Emulex着眼数据中心LAN与SAN的聚合
  13. 驾驶证体检医院(114---2 挂对应的医院司机体检)
  14. python爬虫之QQ空间登陆获取信息(超级详细)
  15. 解决Win7系统安装时缺少驱动
  16. python里str什么意思_python中str是什么意思
  17. c语言程序负数,C程序,检查数字是正数还是负数
  18. 小记Android Gradle插件 Iven 记于 20190522 药厂
  19. 程序员兼职可以从什么平台接私活?你值得知道!!!
  20. android 放大镜 Magnifier 简单实现

热门文章

  1. 《统计学》第八版贾俊平第十一章一元线性回归知识点总结及课后习题答案
  2. Leetcode(java)
  3. elasticsearch 分组求和
  4. 如何编写一个Makefile文件(手把手的教你)
  5. 低代码平台- Intellij IDEA 插件开发
  6. 北斗高精度定位在民航机场的创新应用
  7. 小学五年级计算机考试试题,小学信息技术考试题库中五年级试题——选择题
  8. svn代码统计工具使用说明
  9. 新偶像时代:被直播重构的粉丝经济和社交平台
  10. 专家称米粒倒闭是个案 不必大惊小怪