把一个字符串的大写字母放到字符串的后面,各个字符的相对位置不变,不能申请额外的空间

把一个字符串的大写字母放到字符串的后面,各个字符的相对位置不变,不能申请额外的空间


题目以及要求:把一个字符串的大写字母放到字符串的后面,各个字符的相对位置不变,不能申请额外的空间。 

我的实现类似冒泡排序。

代码为:

#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



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值