A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张百振 高级黑马   /  2014-5-15 15:00  /  2780 人查看  /  13 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 张百振 于 2014-5-15 22:56 编辑

通过键盘输入一串小写字母(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”
谢谢大家的帮忙

点评

使用查表法.提示:Map集合 Ps:视频里都有.认真看  发表于 2014-5-15 20:41

13 个回复

倒序浏览
你这是在哪来的问题啊?
回复 使用道具 举报
流沙 发表于 2014-5-15 15:06
你这是在哪来的问题啊?

自己在网上找题做啊,就碰见个搞不了的,
回复 使用道具 举报
IO流+正则表达式吧。
看看毕老师最后正则的视频,应该不难做出来,
不过让我做一时半会儿也做不上来,哈哈,还在巩固基础中
回复 使用道具 举报
嗯嗯,知道了,我刚刚学一点这东西,要好好自己弄,实在解决不了再求助,谢谢啦
回复 使用道具 举报
这题还真是没见过,网上找的题,有的太奇怪了,如果基础不是很好先坐些简单的吧
回复 使用道具 举报
视频里有,我都有印象
回复 使用道具 举报
看起来不难的啊,呵呵
回复 使用道具 举报
郭帅帅 发表于 2014-5-15 22:41
看起来不难的啊,呵呵

怎么结束提问啊?
回复 使用道具 举报
我感觉用一个循环就可以了,大概思路是这样的,设立一个n代表当前字符,n-1,代表上一个字符,每次循环更新一下n和n-1。。。。。细节就不详说了。。。 需要的话回复下
回复 使用道具 举报

点开你要操作的帖子,然后你会看见左下角有个编辑选项,状态类型改成结贴就行了
回复 使用道具 举报
你这个是C语言里的里面的题目吧
回复 使用道具 举报
public class Test {

  

static void stringFilter( char InputStr[], long len, char OutputStr[]){
  int[] a= new int[26];
  int num=0;
  int j=0;//OutputStr[]计数
  for(int i=0;i<len;i++){
   num = InputStr[i]-'a';
   if(a[num]==0){//没出现过
    OutputStr[j]=InputStr[i];
    j++;
    a[num]=1;
   }
  }
}

static void stringZip( char InputStr[], long len, char OutputStr[]){
  char temp=' ';
  int num=1;
  int point=0;
  for(int i=0;i<len;i++){
   if(InputStr[i]==temp){
    num++;
   }else{
    if(num!=1){
     OutputStr[point++]=(char)(num+'0');
     num=1;
    }   
    OutputStr[point++]=temp;
    temp=InputStr[i];
   }
  }  
}

public static void main(String[] args) {
  String str="aaacbbbaacdds";
  char [] test=str.toCharArray();
  long len=test.length;
  char [] res = new char[(int) len];
  stringFilter(test,len,res);
  int j=res.length;
  for(int i=0;i<j;i++){
   if(res[i]!='\0'){
    System.out.print(res[i]);
   }else
    break;   
  }

  char[] res2=new char[(int) (2*len)];
  stringZip(test,len,res2);
  for(int i=0;i<2*len;i++){
   if(res2[i]!='\0'){
    System.out.print(res2[i]);
   }else
    break;
  }
}
}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马