如题:
函数将字符串中的字符’‘移到串的前部分,前面的非’‘字符后移,但不能改变非’‘字符的先后顺序,函数返回串中字符’'的数量。如原始串为:abcde*12,处理后为*****abcde12,函数并返回值为5。(要求使用尽量少的时间和辅助空间)
代码如下:
#include<stdio.h>
#include<string.h>
#include<malloc.h>
void main(){
char *str = "abc**de**f"; //这里原字符串没有按照题目中给的来
int len = strlen(str);
char *str1 = (char*)malloc(len+1);
int k=0,i=0;
int flag=0; //存放*号个数
while( str[i]!='\0'){
if(str[i]=='*'){
k++; //k个*号
}
i++;
}
flag = k;
for(i=0;i<k;i++){
str1[i]='*'; //将*号放在前k个字符中
}
i=0;
while(str[i]!='\0'){
if(str[i]!='*'){
str1[k]=str[i]; //将剩下不为*的字符依次放入
k++;
}
i++;
}
i=0;
str1[len]='\0'; //注意字符串以'\0'结尾
while(str1[i]!='\0'){
printf("%c",str1[i]); //打印操作后的字符串
i++;
}
printf("\n有%d个*号",flag);
free(str1); //注意malloc()使用后free()
str1 = NULL;
}
输出结果如下:
****abcdef
有4个*号