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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© vincentgood 中级黑马   /  2014-4-30 23:09  /  1093 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

题目一:通过键盘输入一串小写字母(a~z)组成的字符串。
          请编写一个字符串过滤程序,若字符串中出现多个相同的字符,将非首次出现的字符过滤掉。
  比如字符串“abacacde”过滤结果为“abcde”。

  要求实现函数:void stringFilter(const char *pInputStr, long lInputLen, char *pOutputStr);

  【输入】 pInputStr:  输入字符串
              lInputLen:  输入字符串长度        
  【输出】 pOutputStr: 输出字符串,空间已经开辟好,与输入字符串等长;

  【注意】只需要完成该函数功能算法,中间不需要有任何IO的输入输出

  示例
  输入:“deefd”        输出:“def”
  输入:“afafafaf”     输出:“af”
  输入:“pppppppp”     输出:“p”

  main函数已经隐藏,这里保留给用户的测试入口,在这里测试你的实现函数,可以调用printf打印输出
  当前你可以使用其他方法测试,只要保证最终程序能正确执行即可,该函数实现可以任意修改,
  但是不要改变函数原型。一定要保证编译运行不受影响。
  -------------------------------------------------------------------------------------------*/
  /*题二:题目描述(40分):
  通过键盘输入一串小写字母(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”
     -------------------------------------------------------------------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-'a';
                        if(a[num]==0){//没出现过
                                OutputStr[j]=InputStr;
                                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==temp){
                                num++;
                        }else{
                                if(num!=1){
                                        OutputStr[point++]=(char)(num+'0');
                                        num=1;
                                }                               
                                OutputStr[point++]=temp;
                                temp=InputStr;
                        }
                }               
        }
        public static void main(String[] args) {
                // TODO Auto-generated method stub
                char [] test={'a','a','a','c','b','b','b','a','a','c','a','d','d','d','c','d','e'};
                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!='\0'){
                                System.out.print(res);
                        }else
                                break;                       
                }
               
                char[] res2=new char[(int) (2*len)];
                stringZip(test,len,res2);
                for(int i=0;i<2*len;i++){
                        if(res2!='\0'){
                                System.out.print(res2);
                        }else
                                break;
                }
        }


}




点评

看完毕老师的视频.这些题目都不算问题!!!努力吧,少年  发表于 2014-5-2 21:25

3 个回复

倒序浏览
  1. 题目一的解答:
  2. public class test
  3. {
  4.         public static void main(String[] args)
  5.         {
  6.                 String str  = "abacacde";
  7.                 showFilterString(str);
  8.                
  9.         }
  10.        
  11.         public static void showFilterString(String str)
  12.         {
  13.                 StringBuilder builder = new StringBuilder();
  14.                 List<Character> list = new ArrayList<Character>();
  15.                 char[] chs = str.toCharArray();
  16.                
  17.                 for(int i=0; i<chs.length; i++)
  18.                 {
  19.                         if(!list.contains(chs[i]))
  20.                         {
  21.                                 builder.append(chs[i]);
  22.                                 list.add(chs[i]);
  23.                         }
  24.                 }
  25.                 System.out.println(builder.toString());
  26.         }
  27. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
SyouRai_Tsk + 1

查看全部评分

回复 使用道具 举报
  1. 第二题解答:
  2. public class test
  3. {
  4.         public static void main(String[] args)
  5.         {
  6.                
  7.                 System.out.println(stringZip("aabddd"));

  8.         }

  9.         public static String stringZip(String pInputStr)
  10.         {
  11.        
  12.                 List<Character> list = new ArrayList<Character>();
  13.                 List<Integer> numList = new ArrayList<Integer>();
  14.                 char[] chs = pInputStr.toCharArray();
  15.                 int count = 1;
  16.                 int i;
  17.                 for(i=0; i<(chs.length-1); i++)
  18.                 {
  19.                         if(chs[i] == chs[i+1])
  20.                         {
  21.                                 count++;     //若前一个字符与后一个字符相等,曾递增一次
  22.                         }
  23.                         else if(chs[i] != chs[i+1])
  24.                         {
  25.                                 list.add(chs[i]);
  26.                                 numList.add(count);
  27.                                 count = 1;
  28.                         }
  29.                 }
  30.                 //最后还要比较最后一个字符是否与前一个字符相等的两种情况
  31.                 if(chs[chs.length-2] != chs[chs.length - 1])
  32.                 {
  33.                         list.add(chs[chs.length-1]);
  34.                         numList.add(1);
  35.                 }
  36.                 else
  37.                 {
  38.                         list.add(chs[i]);
  39.                         numList.add(count);
  40.                 }
  41.                 char[] chss = new char[list.size()*2];  //
  42.                 System.out.println(numList);
  43.                 System.out.println(list);
  44.                 for(i=0; i<list.size(); i++)
  45.                 {
  46.                         if(numList.get(i) == 1)  //如果不连续,则为一个计数为一个空格
  47.                                 chss[2*i] = ' ';
  48.                         else
  49.                         {
  50.                                 chss[2*i] = (char)(numList.get(i)+'0');  //否则字符的连续的计数值
  51.                         }
  52.                         chss[2*i+1] = list.get(i);  //字符
  53.                 }
  54.                 return deleteSpace(String.valueOf(chss));
  55.         }
  56.        
  57.         public static String deleteSpace(String str) //去除字符串中的空格
  58.         {
  59.                 char[] chs = str.toCharArray();
  60.                 int len = 0;
  61.                 for(int i=0; i<chs.length; i++)
  62.                 {
  63.                         if(chs[i] != ' ')
  64.                         {
  65.                                 len++;
  66.                         }
  67.                 }
  68.                 char[] dest = new char[len];
  69.                 int j=0;
  70.                 for(int i=0; i<chs.length; i++)
  71.                 {
  72.                         if(chs[i] != ' ')
  73.                         {
  74.                                 dest[j++] = chs[i];
  75.                         }
  76.                 }
  77.                
  78.                 return String.valueOf(dest);
  79.         }
  80. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
SyouRai_Tsk + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马