将一个字符串的大写字母放到字符串的后面,各个字符串的相对顺序不改变,不能申请额外空间 左旋字符串的应用

来源:互联网 发布:基于内容的推荐算法 编辑:程序博客网 时间:2024/05/17 01:23

http://blog.csdn.net/w397090770/article/details/8030317#cpp

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

我的实现类似冒泡排序。

 

以下是我的代码可以参考:

void reverseString(char *str,int len){if(len<=0)return;swap(str[0],str[len]);reverseString(str+1,len-2);}void Left(char *str,int idx,int len){reverseString(str,idx);reverseString(str+idx+1,len-idx-1);reverseString(str,len);}bool isDaXie(char str){if(str-'A'>=0&&str-'Z'<=0)return true;elsereturn false;}void Test_1(char *str,int len){int s=0;while(len>=0){if(isDaXie(str[len])){//是大写s++;Left(str+len,0,strlen(str)-len-s);}elselen--;}}int main(){char str[]="aFDdQeEcc";  //aeaccFDE//Left(str,2,strlen(str)-1);//cout<<str<<endl;Test_1(str,strlen(str)-1);cout<<str<<endl;return 0;}


 

以下是博主的代码:

#include <stdio.h>#include <string.h>//Author: 397090770//E-mail:wyphao.2007@163.com//Date:  2012/09/29 //题目以及要求:把一个字符串的大写字母放到字符串的后面,//各个字符的相对位置不变,不能申请额外的空间。 //判断是不是大写字母 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 * mySort(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;}//遍历完了字符数组,但是没发现大写字母,所以没必要再遍历下去if(j == 0 && !isUpperAlpha(arr[j])){//goto over;                           return arr;}}}//over: return arr;}int main(){char arr[] = "aaaaaaaaaaaaaaaaaaaaaaaAbcAdeBbDc";printf("%s\n", mySort(arr, strlen(arr)));return 0;}


 

原创粉丝点击