牛骨文教育服务平台(让学习变的简单)
博文笔记

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

创建时间:2014-07-21 投稿人: 浏览次数:726

  1. #include <stdio.h>   
  2. #include <string.h>   
  3. //题目以及要求:把一个字符串的大写字母放到字符串的后面,   
  4. //各个字符的相对位置不变,不能申请额外的空间。    
  5. //判断是不是大写字母    
  6. int isUpperAlpha(char c){  
  7. if(c >= "A" && c <= "Z"){  
  8. return 1;  
  9. }  
  10. return 0;   
  11. }  
  12. //交换两个字母    
  13. void swap(char *a, char *b){  
  14. char temp = *a;  
  15. *a = *b;  
  16. *b = temp;  
  17. }   
  18. char * mySort(char *arr, int len){  
  19. if(arr == NULL || len <= 0){  
  20. return NULL;  
  21. }  
  22. int i = 0, j = 0, k = 0;  
  23. for(i = 0; i < len; i++){  
  24. for(j = len - 1 - i; j >= 0; j--){  //比较len-1-i次,也就是比较当前位置后面的次数
  25. if(isUpperAlpha(arr[j])){  
  26. for(k = j; k < len - i - 1; k++){  
  27. swap(&arr[k], &arr[k + 1]);  
  28. }  
  29. break;  
  30. }  
  31. //遍历完了字符数组,但是没发现大写字母,所以没必要再遍历下去   
  32. if(j == 0 && !isUpperAlpha(arr[j])){  
  33. //结束;   
  34.                            return arr;  
  35. }  
  36. }  
  37. }  
  38. //over:    
  39. return arr;  
  40. }  
  41. int main(){  
  42. char arr[] = "aaaaaaaaaaaaaaaaaaaaaaaAbcAdeBbDc";  
  43. printf("%s ", mySort(arr, strlen(arr)));  
  44. return 0;  
  45. }  

声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。