华为机试再回忆--第三题

题目:字符串比较排序

描述: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]='';
 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 }

运行截图:

原文地址:https://www.cnblogs.com/vpoet/p/4755873.html