题目要求:
将字符串中“#”左移至最前面,同时不能修改其它字符的先后顺序,并返回“#”的个数
*如将原始字符串为“ABC###DE#F”,处理后为“####ABCDEF”。
思路:
1.将字符串保存在一个数组里。
2.再申请两个内存用以保存字符“#”和其它字符。
3.将其它字符加到字符“#”后面。
代码实现:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int move(char *str,int len)
{
int i,m=0,n=0;
char *s=(char *)malloc(len);//存储“#”的空间
char *t=(char *)malloc(len);//存储其它字符的空间
for(i=0;i<len+1;i++)
{
if(str[i] == '#')
{
s[m]=str[i];
m++;
}
else
{
t[n]=str[i];
n++;
}
}
for(i=0;i<n;i++)
{
s[m+i]=t[i]; //将其它字符串加到“#”的后面
//s[m+n]=0;
}
printf("转换后的字符串顺序为:%s\n",s);
return m;
free(s); //释放内存
free(t); //释放内存
}
int main()
{
char str[]={'A','B','C','#','#','#','D','E','#','F'};
//char str[10];
//gets(str);
printf("转换前的字符串顺序为:%s\n",str);
int len=strlen(str);
int num=move(str,len);
printf("“#”的个数为:%d\n",num);
return 0;
}
结果如下: