首页 > 试题广场 >

字符串排序

[编程题]字符串排序
  • 热度指数:17930 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
月神拿到一个新的数据集,其中每个样本都是一个字符串,样本的的后六位是纯数字,月神需要将所有样本的后六位数字提出来,转换成数字,并排序输出。

注意:这里的排序并不是针对每个字符串的后六位,而是需要按数字大小顺序输出所有样本的后六位数字。

月神要实现这样一个很简单的功能确没有时间,作为好朋友的你,一定能解决月神的烦恼,对吧。

数据范围:字符串长度满足 ,每组测试中包含 个字符串

输入描述:
每个测试用例的第一行是一个正整数 M ,表示数据集的样本数目

接下来输入 M 行,每行是数据集的一个样本,每个样本均是字符串,且后六位是数字字符。


输出描述:
对每个数据集,输出所有样本的后六位构成的数字排序后的结果(每行输出一个样本的结果)
示例1

输入

4
abc123455
cba312456
boyxx213456
cdwxa654321

输出

123455
213456
312456
654321
n = input()
a = []
for i in range(n) :
    s = raw_input()
    a.append(int(s[-6:]))
    pass
a.sort()
for i in a :
    print i
发表于 2019-07-20 07:54:13 回复(1)
#include <bits/stdc++.h>
using namespace std;
int main()
{
    int m;
    string s[101];
    while(cin>>m)
    {
        int num[m];
        for(int i=0;i<m;i++)
        {
            cin>>s[i];
            string str = s[i].substr(s[i].size() - 6, s[i].size() - 1);
            num[i]=stoi(str);
        }
        sort(num,num+m);
        for(int i=0;i<m;i++)
            cout<<num[i]<<endl;
    }
    return 0;
}

发表于 2019-06-30 19:40:16 回复(0)
"""
人生苦短,我用python
"""
import sys

if __name__ == "__main__":
    # sys.stdin = open("input.txt", "r")
    m = int(input().strip())
    a = []
    for _ in range(m):
        a.append(int(input().strip()[-6:]))
    a.sort()
    for x in a:
        print(x)

发表于 2019-07-06 21:33:00 回复(0)
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <string.h>

#define not !

// function declaration
int str_len(const char* s);
char* sub_str(const char* s, const int start, const int len);

void printNumbers(int* numbers, int numbersSize);
// generic bubble sort algorithm
void bubble_sort(void* __base, const size_t __nmemb, const size_t __size, int (*__comp) (const void*, const void*));
void swap(void* __a, void* __b, const size_t __size);


int compare_int(const void* a, const void* b) {
  return *(int*) a - *(int*) b;
}

int main(const int argc, const char** argv) {
  int m;
  fscanf(stdin, "%d", &m);
  
  int nums[m], numsSize = 0;
  char input[100];
  while (m--) {
    scanf("%s", input);
    *(nums + numsSize++) = atoi(sub_str(input, str_len(input) - 6, 9999));
  }
  
  bubble_sort(nums, numsSize, sizeof(int), compare_int);
  printNumbers(nums, numsSize);
  return 0;
}

int str_len(const char* s) {
  assert(s != NULL);
  if (!*s) return 0;
  
  const char* p = s;
  while (*++p);
  return p - s;
}

// 非常的完美 
char* sub_str(const char* s, const int start, const int len) {
  
  assert(s != NULL);

  const int l = str_len(s);
  if (start < 0 || start >= l) return s;
  
  // 每一个字节都要考虑到!
  char* ss = (char*) malloc((l - start + 1) * sizeof(char)); // ss == sub string
  if (!ss) return s;
  
  char *p = s + start, *q = ss;
  int i = 0; // len 的长度有可能远远大于str start后的实际长度。函式要有一定的容错性!
  while (*p && i++ < len) *q++ = *p++;
  *q = '\0';
  return ss;
}

void printNumbers(int* numbers, int numbersSize) {
  int i;
  for (i = 0; i < numbersSize; ++i)
    fprintf(stdout, "%d\n", *(numbers + i));
}

// 优化版的冒泡排序
void bubble_sort(void* __base, const size_t __nmemb, const size_t __size, int (*__comp) (const void*, const void*))
{
  int t, i, exchange;
  for (t = 0; t < __nmemb - 1; ++t) {
    exchange = 0;
    for (i = 0; i < __nmemb - 1 - t; ++i) {
      if ( __comp((char*) __base + (i * __size), (char*) __base + ((i + 1) * __size)) > 0) {
        swap((char*) __base + (i * __size), (char*) __base + ((i + 1) * __size), __size);
        exchange = 1;
      }
    }
    if (not exchange) break;
  }
}

void swap(void* __a, void* __b, const size_t __size) {
  int i;
  for (i = 0; i < __size; ++i) {
    *((char*) __a + i) ^= *((char*) __b + i);
    *((char*) __b + i) ^= *((char*) __a + i);
    *((char*) __a + i) ^= *((char*) __b + i);
  }
}

发表于 2021-07-18 11:33:37 回复(0)
直接截取子串然后排序
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.Arrays;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String strN;
        while((strN = br.readLine()) != null){
            int n = Integer.parseInt(strN);
            String[] arr = new String[n];
            String content;
            for(int i = 0; i < n; i++){
                content = br.readLine().trim();
                arr[i] = content.substring(content.length() - 6);
            }
            // 直接进行字符串排序
            Arrays.sort(arr);
            for(int i = 0; i < n; i++)
                System.out.println(arr[i]);
        }
    }
}


发表于 2020-10-28 16:43:34 回复(0)
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
int main() {
 int M;
 cin >> M;
 string input, str;
 string output[101];
 for (int i = 0; i < M; i++) {
  cin >> input;
  int k = 0;
  for (int j = input.size() - 6; j < input.size(); j++) {
   str += input[j];
  }
  output[i] = str;
  str.erase(0);
 }
 sort(output, output + M);
 for (int i = 0; i < M; i++) {
  cout << output[i] << endl;
 }
 return 0;
}

发表于 2020-06-29 22:23:12 回复(0)
n = int(input())   # 输入都是字符串,要当数字使用需要类型转换
st = []
for i in range(n):
    st.append(input()[-6:])
for e in sorted(st):   (1281)# 要求按字典序输出
    print(e)
一阵子不写代码,很多东西都忘了。放下容易,捡起来难啊。
发表于 2020-03-03 21:12:23 回复(0)
#include<bits/stdc++.h>
using namespace std;
int main(){
    int m;
    while(cin>>m){
        char** ch=new char*[m];
        int *rec=new int[m];
        for(int i=0;i<m;i++){
            ch[i]=new char[100];
            cin>>ch[i];
            int len=strlen(ch[i]),total=0;
            for(int j=len-6;j<len;j++)
                total+=pow(10,len-1-j)*(ch[i][j]-'0');
            rec[i]=total;
        }
        sort(rec,rec+m);
        for(int i=0;i<m;i++)
            cout<<rec[i]<<endl;
    }
    return 0;
}

发表于 2020-01-18 09:50:23 回复(0)
前排老哥用python还写得那么长,,这和写c++有啥区别
python用2行就能搞定
for n in sorted([int(input()[-6:]) for i in range(int(input()))]):
    print(n)



编辑于 2019-12-25 15:35:48 回复(0)
#include <bits/stdc++.h>
using namespace std;

int main(){
    int n;
    cin>>n;
    int a[n];
    string s;
    for(int i=0;i<n;i++){
        cin>>s;
        string t = s.substr(s.length()-6,6);
        a[i] = stoi(t);
    }
    sort(a,a+n);
    for(int i=0;i<n;i++)
        cout<<a[i]<<endl;
    return 0;
}

发表于 2019-11-10 01:46:23 回复(0)
#include <string>
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
    int m;
    cin >> m;
    vector<string> v;
    while(m--)
    {
        string str;
        cin >> str;
        string temp = "";
        temp = str.substr(str.size()-6);
        v.push_back(temp);
    }
    sort(v.begin(),v.end());
    for(int i =0;i<v.size();i++)
        cout << v[i] << endl;
    return 0;
}

发表于 2019-10-07 21:45:06 回复(0)
#include <bits/stdc++.h>
using namespace std;
int main(){
    int n;
    set<int,less<int>> min;
    vector<string> vstr;
    cin>>n;
    vstr.resize(n);
    for(int i=0;i<n;i++){
        cin>>vstr[i];
        min.insert(stoi(vstr[i].substr(vstr[i].size()-6,6)));
    }
    for(int i:min)
        cout<<i<<endl;
    return 0;
}


编辑于 2019-09-08 18:41:37 回复(0)
#include<bits/stdc++.h>

using namespace std;
int main(void) {
	string a[101];

	int m = 0;
	cin >> m;
	for (int i = 0; i < m; i++) {
		cin >> a[i];
	}

	multiset<string> mset;
	for (int i = 0; i < m; i++) {
		mset.insert(a[i].substr(a[i].length() - 6));
	}

	multiset<string>::iterator iter;

	for (iter = mset.begin(); iter != mset.end(); iter++) {
		cout << *iter << endl;
	}
	return 0;
}
编辑于 2019-08-14 10:20:21 回复(0)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;

public class Main {

    /**
     * 每次把后6位数字切出来丢进数组,之后排序
     */
    public static void main(String[] args) throws IOException {
        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(bf.readLine());
        int[] ans = new int[n];
        for (int i = 0; i < n; i++) {
            String s = bf.readLine();
            ans[i] = Integer.parseInt(s.substring(s.length()-6,s.length()));
        }
        Arrays.sort(ans);
        for (int i = 0; i < ans.length; i++) {
            System.out.println(ans[i]);
        }
    }
}
发表于 2019-08-03 20:07:28 回复(6)
/*
取子串。
利用Integer的parseInt方法转化成整型。
排序。
*/
import java.util.*;
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int M = in.nextInt();
        int[] arr = new int[M];
        for (int i = 0; i < M; i++) {
            String s = in.next();
            int len = s.length();
            String lasts = s.substring(len - 6, len);
            arr[i] = Integer.parseInt(lasts);
        }
        Arrays.sort(arr);
        for (int i : arr) {
            System.out.println(i);
        }
    }
}

发表于 2019-06-28 11:22:05 回复(0)
const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;

void async function () {
    // Write your code here
    await readline()
    let res=[]
    while(line = await readline()){
        res.push(line.slice(-6))
    }
    res=res.map(v=>Number(v)).sort((a,b)=>a-b)
    for(let i=0;i<res.length;i++){
        console.log(res[i])
    }
}()

编辑于 2024-01-05 10:10:35 回复(0)
首先将字符串的后六位截下来强转为int类型,存在数组里,再用数组方法(Arrays)排序输出
发表于 2023-10-31 04:51:56 回复(0)
获取所有输入字符串,截取并插入数组中,在进行排序
<?php
$arr = [];
fscanf(STDIN, "%d", $num);
for($i = 0; $i < $num; $i++){
    fscanf(STDIN, "%s", $str);
    $str = substr($str,-6);
    array_push($arr,$str);
}
sort($arr);
foreach($arr as $v){
    echo $v."\n";
}


发表于 2023-03-24 17:52:13 回复(0)
package main

import (
    "fmt"
    "strconv"
    "sort"
)

func main() {
    var n int
    fmt.Scan(&n)
    arr:=[]int{}
    var s string
    for n>0{
        fmt.Scan(&s)
        x,_:=strconv.Atoi(s[len(s)-6:])
        arr=append(arr,x)
        n--
    }
    sort.Ints(arr)
    for _,x:=range arr{
        fmt.Println(x)
    }
}

发表于 2023-03-11 19:42:18 回复(0)
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main() {
    string s;
    int n;
    cin >> n;
    vector<int> v(n, 0);
    while(n--){
        cin >> s;
        for(int i = s.length() - 6; i < s.length(); i++){
            v[n] *= 10;
            v[n] += s[i] - '0';
        }
    }
    sort(v.begin(), v.end());
    for(int i : v)
        cout << i << endl;
    return 0;
}

发表于 2023-01-02 16:22:08 回复(0)