#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
typedef struct Node
{
char key;
int num;
}Node,*NodePtr;
int cmp(const void*a,const void*b)
{
NodePtr pa = (NodePtr)a;
NodePtr pb = (NodePtr)b;
char ca = toupper(pa->key);
char cb = toupper(pb->key);
if(ca==cb)//如果两个元素相等就比较他们的下标即先后次序
{
return pa->num - pb->num;
}
else
{
return ca - cb;
}
}
int main(int argc, char const *argv[])
{
char str[1000];//,buf[1000];
while(fgets(str,999,stdin)!=NULL)
{
int i,j;
Node arr[strlen(str)];
for(i=0,j=0;i<strlen(str);i++)
{
if(isalpha(str[i]))
{
arr[j].num = j;
arr[j++].key = str[i];
}
}
qsort(arr,j,sizeof(Node),cmp);
for(i=0,j=0;i<strlen(str);i++)
{
if(isalpha(str[i]))
{
str[i] = arr[j++].key;
//str[i] = buf[j++];
}
}
printf("%s",str );
}
return 0;
}
————————————————————————————————
#include<stdio.h>
#include<ctype.h>
#include<string.h>
int main(){
char a[1000];
char b[1000];
int count[26];
int index;char temp;
while(gets(a)){
memset(count,0,sizeof(int)*26);
for(int i=0;a[i]!='\0';i++){
if(isalpha(a[i])){
temp=tolower(a[i]);
index=temp-'a';
b[count[index]*26+index]=a[i];
count[index]++;
}
}
int j=0;
for(int i=0;i<26;i++){
for(int k=0;k<count[i];k++){
if(isalpha(a[j]))
printf("%c",b[i+k*26]);
else{
printf("%c",a[j]);
k--;
}
j++;
}
}
while(a[j]!='\0')
printf("%c",a[j]);
printf("\n");
}
}
————————————————————————————————
#include<stdio.h>
#include<ctype.h>
#include<string.h>
int main(){
char a[500];
char b[500];
int count[26];
int index;char temp;
while(gets(a)){
memset(count,0,sizeof(int)*26);
for(int i=0;a[i]!='\0';i++){
if(isalpha(a[i])){
temp=tolower(a[i]);
index=temp-'a';
b[count[index]*26+index]=a[i];
count[index]++;
}
}
int j=0;
for(int i=0;i<26;i++){
for(int k=0;k<count[i];k++){
if(isalpha(a[j]))
a[j]=b[i+k*26];
else
k--;
j++;
}
}
printf("%s\n",a);
}
}
中间那种内存超了,下面是优化的。
https://www.nowcoder.com/practice/d9aa3894d3aa4887843a85d26daa4437?tpId=61&&tqId=29548&rp=1&ru=/activity/oj&qru=/ta/pku-kaoyan/question-ranking
网友评论