把一个字符串的大写字母放到字符串的后面,各个字符的相对位置不变,不能申请额外的空间
题目以及要求:把一个字符串的大写字母放到字符串的后面,各个字符的相对位置不变,不能申请额外的空间。
我的实现类似冒泡排序。
代码为:
#include<stdio.h>
#include<string.h>
int isUpperAlpha(char c){
if(c>='A' && c<='Z'){
return 1;
}
return 0;
}
void swap(char *a,char *b)
{
char temp=*a;
*a=*b;
*b=temp;
}
char *Sort(char *arr,int len)
{
if(arr==NULL || len<=0)
{
return NULL;
}
int i=0,j=0,k=0;
for(i=0;i<len;i++){
for(j=len-1-i;j>=0;j--){
if(isUpperAlpha(arr[j])){
for(k=j;k<len-i-1;k++){
swap(&arr[k],&arr[k+1]);
}
break;//退出该层for循环,进入外层for循环
}
if(j==0 && !isUpperAlpha(arr[j])){ //遍历完了字符数组,但没有发现大写字母,所以没有必要遍历下去了。
return arr;
}
}
}
return arr;
}
int main(){
char arr[]="aabdfcDDrFdFdDdd";
printf("%s\n",Sort(arr,strlen(arr)));
return 0;
}
参考: http://blog.csdn.net/wypblog/article/details/8030317