HJ26. 字符串排序
描述
编写一个程序,将输入字符串中的字符按如下规则排序。
规则 1 :英文字母从 A 到 Z 排列,不区分大小写。
如,输入: Type 输出: epTy
规则 2 :同一个英文字母的大小写同时存在时,按照输入顺序排列。
如,输入: BabA 输出: aABb
规则 3 :非英文字母的其它字符保持原来的位置。
输入描述
输入字符串输出描述
输出字符串示例1
输入:
A Famous Saying: Much Ado About Nothing (2012/8).
输出:
A aaAAbc dFgghh: iimM nNn oooos Sttuuuy (2012/8).
C 解法, 执行用时: 1ms, 内存消耗: 292KB, 提交时间: 2021-09-09
#include<stdio.h> int main(){ char in[1024]; char out[1024]; char p='A'; // 从A到Z int j=0; // out数组的当前下标 while(gets(in)) { memset(out,0,sizeof(out)); j=0; p='A'; while(j < strlen(in)) { for(int i= 0; i<strlen(in); i++) { if((in[i]>='A' && in[i]<='Z') || (in[i]>='a' && in[i]<='z')) { if(out[j] != NULL) { // 非NULL表示被当前位置已经填的是符号了 j++; i--; continue; } if(in[i] == p || in[i] == p+32) { // 匹配到大小写 out[j++] = in[i]; } } else { // 符号则直接存放到out对应位置 out[i] = in[i]; } } p++; } printf("%s\n", out); } }
C 解法, 执行用时: 1ms, 内存消耗: 308KB, 提交时间: 2021-09-12
#include <stdio.h> #include <string.h> int main(){ char str[1000]; while(gets(str)){ int i,j,k=0; char temp[1000]={0}; for(int i=0;i<26;i++){ for(int j=0;j<strlen(str);j++){ if(str[j]=='a'+i || str[j]=='A'+i) temp[k++]=str[j]; } } k=0; for(i=0;i<strlen(str);i++){ if((str[i]>='a'&&str[i]<='z')||(str[i]>='A'&&str[i]<='Z')) str[i]=temp[k++]; } printf("%s\n",str); } return 0; }