华为机试再回忆--第三题
题目:字符串比较排序
描述:1.字符串由大小写字母,数字及空格组成,一个或者多个空格将多个字符串隔开
2.解析出各字符串
3.输出结果时,将各个子串按长度从大到小排序,如果长度一样,按照小写字母>大写字母>数字 进行排序
4.输出结果时,一个空格隔多个子串
样例输入:w23r at 1rt Af w13r
样例输出:w13r w23r 1rt at Af
本题几个注意的地方:
1.输入用getline才能输入空格
2.字符串解析出来后,用一个辅助数组保存各个字符串长度然后再使用辅助串长度对字符串进行交换
3.由于长度一样的时候按照小写字母>大写字母>数字排序,正好可使用strcmp
代码实现如下:
1 #include <iostream> 2 #include <string> 3 using namespace std; 4 5 #define StrSize 100 6 7 int main() 8 { 9 10 string OriginalStr; 11 getline(cin,OriginalStr); 12 13 14 15 int index=0; 16 int j=0; 17 int count=0; 18 while(true) 19 { 20 if(OriginalStr[index]!=' ') 21 { 22 j++; 23 index++; 24 } 25 else 26 { 27 index++; 28 j=0; 29 } 30 31 if(OriginalStr[index-1]==' '&&OriginalStr[index]!=' ') 32 { 33 count++; 34 } 35 36 if(index>=OriginalStr.length()) 37 break; 38 } 39 40 count=count+1; 41 42 char **StrArray=new char *[count]; 43 for(int i=0;i<count;i++) 44 { 45 StrArray[i]=new char[StrSize]; 46 } 47 48 for(int i=0;i<count;i++) 49 for(int j=0;j<StrSize;j++) 50 StrArray[i][j]='\0'; 51 52 index=0; 53 j=0; 54 int k=0; 55 while(true) 56 { 57 if(OriginalStr[index]!=' ') 58 { 59 StrArray[k][j++]=OriginalStr[index++]; 60 } 61 else 62 { 63 index++; 64 j=0; 65 } 66 67 if(OriginalStr[index-1]==' '&&OriginalStr[index]!=' ') 68 { 69 k++; 70 } 71 72 if(index>=OriginalStr.length()) 73 break; 74 } 75 76 int *LenArr=new int[count]; 77 for(int i=0;i<count;i++) 78 { 79 LenArr[i]=strlen(StrArray[i]); 80 } 81 82 for(int i=0;i<count;i++) 83 { 84 for(int j=i;j<count;j++) 85 if(LenArr[i]<LenArr[j]) 86 { 87 char *temp; 88 temp=StrArray[i]; 89 StrArray[i]=StrArray[j]; 90 StrArray[j]=temp; 91 92 int tempint; 93 tempint=LenArr[i]; 94 LenArr[i]=LenArr[j]; 95 LenArr[j]=tempint; 96 } 97 } 98 99 100 for(int i=0;i<count-1;i++) 101 { 102 if(LenArr[i]==LenArr[i+1]) 103 { 104 if(strcmp(StrArray[i],StrArray[i+1])<0) 105 { 106 char *temp; 107 temp=StrArray[i]; 108 StrArray[i]=StrArray[j]; 109 StrArray[j]=temp; 110 } 111 } 112 } 113 114 115 for(int i=0;i<count;i++) 116 { 117 cout<<StrArray[i]<<" "; 118 } 119 cout<<endl; 120 121 for(int i=0;i<count;i++) 122 { 123 delete[] StrArray[i]; 124 } 125 delete[] StrArray; 126 StrArray=NULL; 127 system("pause"); 128 return 0; 129 }
运行截图:
作者:vpoet
出处:http://www.cnblogs.com/vpoet/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
出处:http://www.cnblogs.com/vpoet/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。