C#对字符串的排序重组问题
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
程序运行结果:
char temp = c[k]; for (int j = k; j > i; j--) {
c[j] = c[j - 1]; } c[i] = temp; break; } } } }
Console.WriteLine("第二次大写字母放在中间的--排序后结果:{0}", new string(c));
//如果当前数不是数字类别,这时找到第一个是数字类别的字符 //找到后将数字放到当前索引位置。 if (char.IsDigit(c[i]) == false) {
for (int k = i + 1; k < c.Length; k++) {
//找到第一个数字,本次循环就中断 if (char.IsDigit(c[k]))
{ //c[0]=c[k],其他依次向后移动一位c[j]=c[j-1] char temp = c[k]; for (int j = k; j > i; j--) { c[j] = c[j - 1]; } c[i] = temp; break;
} } } } Console.WriteLine("第一次数字类型放在最前面--排序后结果:{0}",new string(c)); int upperLetterIndex = 0;//第一个不是数字的索引作为大写字母的索引 for (int i = 0; i < c.Length; i++) { if (char.IsDigit(c[i]) == false) //第一个不是数字的 { upperLetterIndex = i; break; } }
string s = "sfD8MgA2中S国a人G7"; //数字的最前面,大写字母中间,小写字母在后面,其他最后。不要改变次序 //返回:DMASGsfga中国人 char[] c = s.ToCharArray(); for (int i = 0; i < c.Length; i++) //提炼出数字 {
for (int i = upperLetterIndex; i < c.Length; i++) //大写字母排在中间 {
if ((c[i] >= 'A' && c[i] <= 'Z') == false) {
for (int k =Biblioteka Baidui + 1; k < c.Length; k++) {
if (c[k] >= 'A' && c[k] <= 'Z') {
if (c[k] >= 'a' && c[k] <= 'z') //从下一个开始找小写字母找到中断
{ char temp = c[k]; for (int j = k; j > i; j--) { c[j] = c[j - 1]; } c[i] = temp; break;
} } } } Console.WriteLine("第三次小写字母放在再后面--排序后结果:{0}", new string(c)); string afterSortStr = new string(c); Console.WriteLine("原来是:{0}\n排序后:{1}", s, afterSortStr); } static void Main(string[] args) { SortArr(); Console.ReadLine(); }
对字符串排序重组
已知一个字符串,由数字、大写字母、小写字母和其他字符组成。
将字符串按数字的排在最前面,大写字母排在中间,
小写字母排在后面,其他字符排在最后面,不要打乱字符的前后顺序。
比如字符串"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中国人" /// </summary> static void SortArr() {
lowerLetterIndex = i; break; } } for (int i = lowerLetterIndex; i < c.Length; i++) //小写字母排列 { if ((c[i] >= 'a' && c[i] <= 'z') == false)//如果当前不是小写字母 { for (int k = i + 1; k < c.Length; k++) {
//从upperLetterIndex开始查找不是大写字母的 int lowerLetterIndex = upperLetterIndex; for (int i = upperLetterIndex; i < c.Length; i++) {
if ((c[i] >= 'A' && c[i] <= 'Z') == false) {