首页 > 试题广场 >

字母数字混合排序

[编程题]字母数字混合排序
  • 热度指数:2622 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
输入一串字符,包含数字[0-9]和小写字母[a-z],要求按数字从小到大、字母从a到z排序,并且所有数字排在字母后面

输入描述:
一串字符


输出描述:
按规则排序的一串字符
示例1

输入

a31bz

输出

abz13
#include <bits/stdc++.h>
using namespace std; 
int main()
{
    string s,s1="",s2="";
    cin>>s;
    for(int i=0;i<s.size();i++)
    {
        if(s[i]>='0'&&s[i]<='9')
            s1+=s[i];
        else if(s[i]>='a'&&s[i]<='z')
            s2+=s[i];
    }
    sort(s1.begin(),s1.end());
    sort(s2.begin(),s2.end());
    s1=s2+s1;
    cout<<s1<<endl;
    return 0;
}

发表于 2019-06-18 10:33:31 回复(0)
Python3
# 普通字典序是数字在字母前面
# 可以先排序,然后使用正则表达式,找到数字,并把数字放到字母后面
# 实测,使用正则表达式没有比较字符码值效率高
# 字符串没有sort()方法,sorted()排序过后得到的是字符list

"""
import re

ls = sorted(input())
s = "".join(ls)
p = re.compile(r"\d*")
l = len(p.search(s).group())
print(s[l:]+s[:l])
"""

ls = sorted(input())
t = 0
for i in range(len(ls)):
    if ord(ls[i]) > ord('9'):
        t = i
        break
print("".join(ls[t:]+ls[:t]))


发表于 2019-08-18 00:31:14 回复(0)
1. 不给数据规模的题目差评:(
2. 采用类似计数排序的思想,一趟扫描一趟计数,O(n)
#include <stdio.h>
#include <string.h>
#define maxlen 100010
#define maxans 37
char str[maxlen];
int ch_ans[maxans];
int main(){
    int i,j,len;
    char tmp;
    scanf("%s",str);
    len=strlen(str);
    memset(ch_ans,0,sizeof(ch_ans));
    for(i=0;i<len;i++){
        if(str[i]>='a' && str[i]<='z')
            ch_ans[str[i]-'a'+1]++;
        else if(str[i]>='0' && str[i]<='9')
            ch_ans[str[i]-'0'+27]++;
    }
    for(i=1;i<maxans;i++){
        while(ch_ans[i]!=0){
            if(i>=1 && i<=26)
                printf("%c",'a'+i-1);
            else
                printf("%c",'0'+i-27);
            ch_ans[i]--;
        }
    }
    printf("\n");
    return 0;
}

发表于 2019-03-02 23:50:02 回复(0)
import java.util.Arrays;
import java.util.Scanner;

/**
* @author wylu
*/
public class Main {
    public static void main(String[] args) {

        String str = new Scanner(System.in).nextLine();
        char[] array = str.toCharArray();
        
        Arrays.sort(array);
        //13abz
        String left="";
        String right="";
        
        for (char c : array) {
            if(c>='0'&&c<='9'){
                right=right+c;
            }
            
            if(c>='a'&&c<='z'){
                left=left+c;
            }
        }
        
        System.out.println(left+right);
    }
}
发表于 2019-03-02 10:05:35 回复(0)
import java.util.*;
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        Character[] in = sc.nextLine().chars().mapToObj(c -> (char)c).toArray(Character[]::new);
        Arrays.sort(in, new Comparator<Character>() {
            @Override
            public int compare(Character o1, Character o2) {
                if (Character.isDigit(o1) && Character.isAlphabetic(o2)) { return 1; }
                else if (Character.isDigit(o2) && Character.isAlphabetic(o1)) { return -1; }
                return Character.compare(o1, o2);
            }
        });
        StringBuilder sb = new StringBuilder();
        for (char c : in) {
            sb.append(c);
        }
        System.out.println(sb.toString());
        return;
    }
}
发表于 2019-02-13 19:22:20 回复(0)

python两行

分别取出字母和数字,进行排序,将结果拼接起来。

string = input()
print("".join(sorted(filter(lambda c:c.isalpha(),string)) + sorted(filter(lambda c:c.isdigit(),string))))
发表于 2019-03-19 22:28:39 回复(0)
#include <bits/stdc++.h>
using namespace std;

int main()
{
    string str;
    while(cin>>str)
    {
        sort(str.begin(),str.end(),[](const char& a,const char &b){
            if(a>='a'&&a<='z'&&b>='0'&&b<='9')
                return true;
            else if(a>='0'&&a<='9'&&b>='a'&&b<='z')
                return false;
           else
               return a<b;
        });
           cout<<str<<endl;
    }
}

编辑于 2019-06-09 09:56:34 回复(0)
print(''.join(sorted(input(),key=lambda x:[ord(x)<97,x])))

发表于 2019-03-29 09:50:18 回复(0)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

/**
 * 计数排序
 * @author wylu
 */
public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        char[] s = br.readLine().toCharArray();

        int[] letters = new int[26], digits = new int[10];
        for (char ch : s) {
            if (ch >= '0' && ch <= '9') digits[ch - '0']++;
            else letters[ch - 'a']++;
        }

        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < letters.length; i++) {
            for (int j = 0; j < letters[i]; j++) sb.append((char) (i + 'a'));
        }
        for (int i = 0; i < digits.length; i++) {
            for (int j = 0; j < digits[i]; j++) sb.append((char) (i + '0'));
        }
        System.out.println(sb);
    }
}

发表于 2019-01-18 15:59:58 回复(0)
s = input()
result = ""
list1 = []
list2 = []
for c in s:
    if 'a' <= c <='z':
        list1.append(c)
    else:
        list2.append(c)
list1.sort()
list2.sort()
for c in list1:
    result += c
for c in list2:
    result += c
print(result)

发表于 2024-05-02 17:15:20 回复(0)
raw = list(input())
raw.sort()
num = ''
word = ''
for i in raw:
    if i.isalpha():
        word += i 
    else:
        num += i      
print(word + num)
发表于 2022-06-03 00:22:14 回复(0)
import java.util.Scanner;
public class Main {
    /*1.将字符串转化成字符数组
      2.首先将数字与字母划分开
      3.采用冒泡排序的思想(注意将数字与字母分开冒泡)
      
    注意:1.数字从小到大,字母从a到z
         2.所有数字排在字母后面
    */
    //程序完成一部分就测试一部分
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String string = scanner.next();
        char[] array = new char[string.length()];
        int i=0;
        //将字符串转化到字符数组中
        while(i < string.length()) {
            array[i] = string.charAt(i++);
        }
        //将数字放在字符串后面
        for(int j = array.length-1;j >= 0;j--){
            if(array[j] >= '0' && array[j] <= '9') {
                for(int k = j ;k < array.length-1; k++) {
                    char temp = array[k];
                    array[k] = array[k+1];
                    array[k+1] = temp;
                }
            }
        }
        //for(char ch:array) System.out.print(ch);
        //找到字母与数字分界线(下标从0开始)(下标表示数字)
        int position = 0;
        while(array[position] >= 'a' && array[position] <= 'z') position++;
        //分界线前后分别冒泡排序
        for(int j = position - 1; j > 0 ;j--) {//处理字母
            for(int k = 0 ; k < j; k++) {
                if(array[k] > array[k + 1]) {
                    char temp = array[k];
                    array[k] = array[k+1];
                    array[k+1] = temp;
                }
            }
        }
        for(int j = array.length -1; j > position ;j--) {//处理数字
            for(int k = position ; k < j; k++) {
                if(array[k] > array[k + 1]) {
                    char temp = array[k];
                    array[k] = array[k+1];
                    array[k+1] = temp;
                }
            }
        }
        for(char ch:array) System.out.print(ch);
        
    }
}
发表于 2022-04-23 14:35:54 回复(0)
import java.util.*;
  
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while (sc.hasNext()) {
            String str = sc.next();
            System.out.println(helper(str));
        }
    }
    
    public static String helper(String str){
        StringBuilder sb1=new StringBuilder();
        StringBuilder sb2=new StringBuilder();
        for(int i=0;i<str.length();i++){
            if(str.charAt(i)>='a'&&str.charAt(i)<='z'){
                sb1.append(str.charAt(i));
            }else if(str.charAt(i)>='0'&&str.charAt(i)<='9'){
                sb2.append(str.charAt(i));
            }
        }
        char[]cs1=sb1.toString().toCharArray();
        char[]cs2=sb2.toString().toCharArray();
        Arrays.sort(cs1);
        Arrays.sort(cs2);
        StringBuilder sb=new StringBuilder();
        for(char c:cs1)sb.append(c);
        for(char c:cs2)sb.append(c);
        return sb.toString();
    }
} 

发表于 2020-08-30 23:22:22 回复(0)
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.Map;
import java.util.Queue;
import java.util.Scanner;
import java.util.Stack;

public class Main {

    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);
char[] carr=sc.nextLine().toCharArray();



        int i,j;
        char temp;
        
        for(i=0;i<carr.length;i++) {
            for(j=0;j<carr.length-i-1;j++) {
                
                if(carr[j]>carr[j+1]) {
                    
                    temp=carr[j];
                    carr[j]=carr[j+1];
                    carr[j+1]=temp;
                    
                    
                }
                
                
                
                
                
            }
            
            
            
        }
















        //System.out.println(carr);
        int p = 0;
        while(p<carr.length) {
            
            
            if(carr[p]>='a') {
                
                
                System.out.print(carr[p]);    
                
            }
            
            
            p++;
            
        }
        
        
         p = 0;
            while(p<carr.length) {
                
                
                if(carr[p]<='9') {
                    
                    
                    System.out.print(carr[p]);    
                    
                }
                
                
                p++;
                
            }

    }
}
发表于 2020-06-05 21:31:56 回复(0)
#include <bits/stdc++.h>
using namespace std;

int main()
{
	string s, si, sc;
	cin >> s;
	for (int i = 0; i < s.size(); i++)
	{
		if (s[i] >= '0'&&s[i] <= '9')si += s[i];
		else sc += s[i];
	}
	sort(si.begin(), si.end());
	sort(sc.begin(), sc.end());
	s = "";
	s += sc;
	s += si;
	cout << s;
}

发表于 2020-04-28 14:14:30 回复(0)
            var arr=readline().split('');
            var num_arr=[];
            var str_arr=[];
            for(var i=0;i<arr.length;i++){
                if(arr[i].charCodeAt(0)<=57){
                    num_arr.push(arr[i])
                }else{
                    str_arr.push(arr[i])
                }
            }
            //获取数字数组和英文数组
            //console.log(num_arr)
            for(var i=0;i<num_arr.length;i++){
                for(var j=0;j<num_arr.length-i-1;j++){
                    if(num_arr[j].charCodeAt(0)>num_arr[j+1].charCodeAt(0)){
                        var tem=num_arr[j];
                        num_arr[j]=num_arr[j+1];
                        num_arr[j+1]=tem;
                    }
                }
            }
            //console.log(num_arr)
            for(var i=0;i<str_arr.length;i++){
                for(var j=0;j<str_arr.length-i-1;j++){
                    if(str_arr[j].charCodeAt(0)>str_arr[j+1].charCodeAt(0)){
                        var tem=str_arr[j];
                        str_arr[j]=str_arr[j+1];
                        str_arr[j+1]=tem;
                    }
                }
            }
            print(str_arr.join('')+num_arr.join(''))
发表于 2019-12-04 22:58:50 回复(0)
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int main()
{
    string Cstr;
    cin>>Cstr;
    sort(Cstr.begin(),Cstr.end());
    string sample="abcdefghijklmnopqrstuvwxyz";
    auto flag=Cstr.find_first_of(sample);
    cout<<Cstr.substr(flag)<<Cstr.substr(0,flag);
}

发表于 2019-09-10 19:09:25 回复(0)
果真是巨坑,没给数据规模而已
#include<iostream>
#include<algorithm>
#include<string.h>
using namespace std;
int main()
{
    char str[1000000];
    int len=0;
    while(cin>>str)
    {
        len=strlen(str);
        int m=0;
    sort(str,str+len);
    for(int i=0;i<len;i++)
    {
        if(str[i]>='0'&&str[i]<='9')
        {
            m++;
            continue;
        }
        else
        {
            cout<<str[i];
            continue;
        }
    }
    for(int i=0;i<m;i++)
        cout<<str[i];
    }
}

发表于 2019-06-03 16:57:56 回复(0)
using System;
namespace myNamespace
{
    clas***yClass
    {
        static void Main(string[] args)
        {
            string s=Console.ReadLine();
           string zm=null;
           string sz=null;
        
           for(int i=0;i<s.Length;i++)
           {
               if(s[i]<='9'&&s[i]>='0')
               {
                   sz+=s[i];
               }else
               {
                   zm+=s[i];
               }
           }
           char[] zm1=zm.ToCharArray();
           char[] sz1=sz.ToCharArray();
           for(int i=0;i<sz1.Length;i++)
           {
               for(int j=i;j<sz1.Length;j++)
              {
                if(sz1[i]>sz1[j])
                {
                    char c=sz1[i]; 
                    sz1[i]= sz1[j];
                    sz1[j]=c;       
                }
              }
           }
           for(int i=0;i<zm1.Length;i++)
           {
               for(int j=i;j<zm1.Length;j++)
              {
                if(zm1[i]>zm1[j])
                {
                    char c=zm1[i]; 
                    zm1[i]= zm1[j];
                    zm1[j]=c;       
                }
              }
           }
           string zm2=new string(zm1);
           string sz2=new string(sz1);
           
           Console.WriteLine(zm2+sz2);
        }
    }
}

发表于 2019-05-19 16:23:28 回复(0)
#include<stdio.h>
int main()
{
    int letter[26] = {0};
    int num[10] = {0};
    int i,j;
    char c;
    do
    {
        c = getchar();

        if(c>='0' && c<='9')
        {
            num[c-48]++;
        }
        else if(c>='a' && c<='z')
        {
            letter[c-97]++;
        }
    }while(c != '\n');
    
    for(i=0; i<26; i++)
    {
        for(j=0; j<letter[i]; j++)
        {
            printf("%c",i+'a');
        }
    }
    for(i=0; i<10; i++)
    {
        for(j=0; j<num[i]; j++)
        {
            printf("%c",i+'0');
        }
    }    

    return 0;
}

发表于 2019-05-06 20:36:21 回复(0)