文章

61

粉丝

137

获赞

18

访问

40.0k

头像
字符串排序2 题解:用两个数组分别记录字母,和非字母的下标,将字母排序后,利用两个数组决定输出顺序
推荐阅读
P1255 北京大学机试题
发布于2024年1月28日 11:06
阅读数 871

#include<bits/stdc++.h>
using namespace std ;


/*
规则2的要求在算法上表现是排序具有稳定性
*/

int tfo(char a) ;
bool cmp(char a ,char b);

int main(){
    char s [200] ;
    char result [200] ;
    gets(s);                    //输入有空格不能使用cin或者scanf
    int slen = strlen(s) ;
    char wd [slen] ;     //存储字母用于字母的排序
    int rcd [slen] = {0};        //用于记录非字母字符所在下标
    int wdlen = 0 ;
    //构建wd和rcd数组
    for(int i = 0 ;i < slen ;i ++){
        if('A' <= s[i] && s[i] <= 'z')
            wd[wdlen++] = s[i] ;    //记录字母字符
        else rcd[i] = 1 ;   //记录非字母字符所在下标
    }
    stable_sort(wd ,wd + wdlen ,cmp) ;

    int flag = 0 ;              //表示输出了几个字符
    for(int i = 0 ;i < wdlen ;i++){
        while(rcd [flag] == 1){
            cout << s[flag] ;
            flag++ ;
        }
        cout << wd[i] ;
        flag++ ;
    }
    
    //将剩下的非字母字符输出
    while(flag <= slen){
        cout << s[flag] ;
        flag ++ ;
    }...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发