设置number数组,0-25代表a-z,26-52代表A-Z遍历数据,有字母,相应位置加一

设置sort数组,0-25代表a-z(不分大小写),当number进入小写字母时候,sort相应位置乘以10并且加1,当进入大写字母时,sort相应位置乘以10并加2(例如sort[0]=1211)那就说明a的顺序应该是aAaa(其中下标0代表是字母a,1211分别代表大小写)

#include<stdio.h>

int main(){

char data[1000]={0};
scanf("%[^\n]", data);
int numbers[52]={0};
long long sort[26]={0};
for(int i=0; data[i] != '\0'; i++){
    if(data[i]>='a' && data[i]<='z'){
        numbers[data[i]-'a']++;
        sort[data[i]-'a']=sort[data[i]-'a']*10+1;
    }
    if(data[i]>='A' && data[i]<='Z'){
        numbers[data[i]-'A'+26]++;
        sort[data[i]-'A']=sort[data[i]-'A']*10+2;
    }
}
    for(int i=0; data[i] != '\0'; i++){
        if(data[i]>='a' && data[i]<='z' || data[i]>='A' && data[i]<='Z'){
            int x=0;
            for(x=0; numbers[x]+numbers[x+26]==0; x++);
            long long so = sort[x];
            int bit = 0;
            while(so>10){
                so/=10;
                bit++;
            }
            if(bit){
                long long all=1;
            while(bit){
                all*=10;
                bit--;
            }
            sort[x]%=all;
            }
            else{
                sort[x]=0;
            }
            
            if(so==1){
                numbers[x]--;
                printf("%c", x+'a');
            }
            else{
                numbers[x+26]--;
                printf("%c", x+'A');
            }
        }
        else{
            printf("%c", data[i]);
        }
    }

}