对字符串排序重组已知一个字符串,由数字、大写字母、小写字母和其他字符组成。将字符串按数字的排在最前面,大写字母排在中间,小写字母排在后面,其他字符排在最后面,不要打乱字符的前后顺序。比如字符串sfD8MgA2中S国a人G7排序结果:8257DMASGsfga中国人。思路:以字符串sfD8MgA2中S国a人G7为例第一步:如果索引0的字符不是数字,则找出第一个数字,将它放在索引0的位置,其他字符索引向后移动一位找出第二个数字,将它放在索引1的位置,其他字符索引向后移动一位……以此类推。排序结果是8257sfDMgA中s国a人G第二步:从不是数字的第一个字符(索引upperLetterIndex)开始排序,找出第一个大写字母,放在upperLetterIndex索引位置,将字符索引向后移动一位。第三步:从upperLetterIndex向后查找找出第一个不是大写字母的开始小写字母排序。操作同上。小写字母排序结束,剩下的就是其他字符了。程序源代码:///summary///已知一个字符串,由数字、大写字母、小写字母和其他字符组成。///将字符串按数字的排在最前面,大写字母排在中间,///小写字母排在后面,其他字符排在最后面,不要打乱字符的前后顺序。///如字符串sfD8MgA2中S国a人G7排序结果:8257DMASGsfga中国人////summarystaticvoidSortArr(){strings=sfD8MgA2中S国a人G7;//数字的最前面,大写字母中间,小写字母在后面,其他最后。不要改变次序//返回:DMASGsfga中国人char[]c=s.ToCharArray();for(inti=0;ic.Length;i++)//提炼出数字{//如果当前数不是数字类别,这时找到第一个是数字类别的字符//找到后将数字放到当前索引位置。if(char.IsDigit(c[i])==false){for(intk=i+1;kc.Length;k++){//找到第一个数字,本次循环就中断if(char.IsDigit(c[k])){//c[0]=c[k],其他依次向后移动一位c[j]=c[j-1]chartemp=c[k];for(intj=k;ji;j--){c[j]=c[j-1];}c[i]=temp;break;}}}}Console.WriteLine(第一次数字类型放在最前面--排序后结果:{0},newstring(c));intupperLetterIndex=0;//第一个不是数字的索引作为大写字母的索引for(inti=0;ic.Length;i++){if(char.IsDigit(c[i])==false)//第一个不是数字的{upperLetterIndex=i;break;}}for(inti=upperLetterIndex;ic.Length;i++)//大写字母排在中间{if((c[i]='A'&&c[i]='Z')==false){for(intk=i+1;kc.Length;k++){if(c[k]='A'&&c[k]='Z'){chartemp=c[k];for(intj=k;ji;j--){c[j]=c[j-1];}c[i]=temp;break;}}}}Console.WriteLine(第二次大写字母放在中间的--排序后结果:{0},newstring(c));//从upperLetterIndex开始查找不是大写字母的intlowerLetterIndex=upperLetterIndex;for(inti=upperLetterIndex;ic.Length;i++){if((c[i]='A'&&c[i]='Z')==false){lowerLetterIndex=i;break;}}for(inti=lowerLetterIndex;ic.Length;i++)//小写字母排列{if((c[i]='a'&&c[i]='z')==false)//如果当前不是小写字母{for(intk=i+1;kc.Length;k++){if(c[k]='a'&&c[k]='z')//从下一个开始找小写字母找到中断{chartemp=c[k];for(intj=k;ji;j--){c[j]=c[j-1];}c[i]=temp;break;}}}}Console.WriteLine(第三次小写字母放在再后面--排序后结果:{0},newstring(c));stringafterSortStr=newstring(c);Console.WriteLine(原来是:{0}\n排序后:{1},s,afterSortStr);}staticvoidMain(string[]args){SortArr();Console.ReadLine();}程序运行结果: