函数将字符串中的字符'*'移到串的前部分,前面的非'*'字符后移,但不能改变非'*'字符的先后顺序

这是一个2005年金山公司的笔试题目,要求编写一个函数,将字符串中的'*'字符移到前面,非'*'字符顺序保持不变,返回'*'的数量。例如,字符串'ab**cd**e*12'处理后变为'*****abcde12',返回值为5。题目强调要尽量减少时间和辅助空间的使用。
摘要由CSDN通过智能技术生成

 2005 年11 月金山笔试题。编码完成下面的处理函数。 函数将字符串中的字符'*'移到串的前部分,前面的非'*'字符后移,但不能改变非'*'字符的先后顺序,函数返回串中字符'*'的数量。如原始串为:ab**cd**e*12,处理后为*****abcde12,函数并返回值为5。(要求使用尽量少的时间和辅助空间)

 

void main()

{

       char  *str ="abc**de**f";

       int len = strlen(str);

       char *str1 = (char*)malloc(len+1);

       int k=0, i = 0;

      whlie( str[i] != '\0' )

      {   

            if(str[i] == '*' )

             {

               k++;   //k个*

             }

      }

      for(i =0 ;i<k ;i++)

      {

            str1[i] = '*'; //前k个值赋值为*

      }

      i =0;

      while(str[i] != '\0')

     {

          if( str[i] != '*')

          {

                str1[k] = str[i];

                 k++;

           }

     }

     str1[len] = '\0';

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值