SDUST OJ Problem G 动态的字符串排序

Description

把字符串按照ASCII码序的从小到大排列出来。

串的ASCII码序遵循如下递归定义:

1 两串的前n-1个字符相同,第n个字符ASCII码序小的排在前面;
2 只有两串的字符完全相同时,才有两串相等。

字符的ASCII码序比较可以用strcmp()函数完成。

Input

第一行输入为一个整数N(N<=50,000),后接N行,每行一个字符串,串长不超过100,000。

Output

输出为N行,按照字符串的ASCII码序排列,ASCII码序小的排前面。

Sample Input

10

abc

bc

aca

ca

c

aac

aba

bc

da

ba

Sample Output

aac

aba

abc

aca

ba

bc

bc

c

ca

da

HINT

用二维数组很难一次性分配出这么大的空间了,要用到根据输入变化的动态分配的内存才行。这里需要动态的数据结构,比如,字符指针的数组“char *s[]”,或者是二维的字符指针“char **s”,等等。

Append Code

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <string.h>
 4 char s[100000 +10];
 5 int cmp(const void *a,const void *b){
 6     char * s1=*((char **)a);
 7     char * s2=*((char **)b);
 8     if(strcmp(s1,s2)>0)return 1;else return 0;
 9 }
10 int main(){
11     int N;
12     scanf("%d",&N);
13     gets(s);
14     char ** strs=(char **)malloc(sizeof(char *)*N);
15     for(int i=0;i<N;i++){
16         gets(s);
17         strs[i]=(char *)malloc(sizeof(char)*(strlen(s)+5));
18         strcpy(strs[i],s);
19     }
20     qsort(strs,N,sizeof(char *),cmp);
21     for(int i=0;i<N;i++){
22         printf("%s\n",strs[i]);
23         free(strs[i]);
24     }
25     free(strs);
26     return 0;
27 }
时间: 2024-11-05 11:29:39

SDUST OJ Problem G 动态的字符串排序的相关文章

山科SDUST OJ Problem J :连分数

Problem J: 连分数 Time Limit: 1 Sec  Memory Limit: 64 MBSubmit: 2723  Solved: 801[Submit][Status][Web Board] Description 一个高为n的连分数定义为 . 给出2个数,一个用p/q的方式表达,另一个用高度为n的连分数来表示,请你判断他们是否相等. Input 输入有多组,每组包含两部分用来表示两种形式的分数:第一部分是p和q(1 ≤ q ≤ p ≤ 10^18),表示分数p/q:然后是一

九度OJ 1066 字符串排序

题目1066:字符串排序 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:4919 解决:1983 题目描述: 输入一个长度不超过20的字符串,对所输入的字符串,按照ASCII码的大小从小到大进行排序,请输出排序后的结果 输入: 一个字符串,其长度n<=20 输出: 输入样例可能有多组,对于每组测试样例, 按照ASCII码的大小对输入的字符串从小到大进行排序,输出排序后的结果 样例输入: dcba 样例输出: abcd #include<stdio.h> #include<

实验7:Problem H: STL——字符串排序

Description 对N个字符串排序. 0<N<=50000.每个字符串长度不超过50000,所有字符串长度总和不超过1000000. Input 第一行读入N. 后面N行,每行一个字符串(只包含字母). Output 输出共N行,按字典序从小到大输出. Sample Input 5 bcdef qwer tyuiphdjf asdfghjklzzzz z Sample Output asdfghjklzzzz bcdef qwer tyuiphdjf z HINT 用STL的string

华为OJ 字符串排序

写完之后,总觉得有点复杂.. 要求: 编写一个程序,将输入字符串中的字符按如下规则排序. 规则1:英文字母从A到Z排列,不区分大小写. 如,输入:Type输出:epTy 规则2:同一个英文字母的大小写同时存在时,按照输入顺序排列. 如,输入:BabA输出:aABb 规则3:非英文字母的其它字符保持原来的位置. 如,输入:By?e输出:Be?y 样例: 输入: A Famous Saying: Much Ado About Nothing(2012/8). 输出: A aaAAbc dFgghh:

【华为OJ】【083-计算字符串的相似度】

[华为OJ][算法总篇章] [华为OJ][083-计算字符串的相似度] [工程下载] 题目描述 对于不同的字符串,我们希望能有办法判断相似程度,我们定义了一套操作方法来把两个不相同的字符串变得相同,具体的操作方法如下: 1 修改一个字符,如把"a"替换为"b". 2 增加一个字符,如把"abdd"变为"aebdd". 3 删除一个字符,如把"travelling"变为"traveling"

【华为OJ】【078-计算字符串的距离】

[华为OJ][算法总篇章] [华为OJ][078-计算字符串的距离] [工程下载] 题目描述 Levenshtein 距离,又称编辑距离,指的是两个字符串之间,由一个转换成另一个所需的最少编辑操作次数.许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符.编辑距离的算法是首先由俄国科学家Levenshtein提出的,故又叫Levenshtein Distance. Ex: 字符串A:abcdefg 字符串B: abcdef 通过增加或是删掉字符"g"的方式达到目的.

[C]字符串排序之-冒泡法

在oj刷题,遇见一题字符串排序题. 脑海里瞬间闪过数组排序. 思路有了,打开题解看看别人的思路,发现好多人的排序方法显得比较臃肿,可能也是我的水平不够,欣赏不来吧. 不过用冒泡法排序的时候一定要记得字符串不可以通过值传递的方式来修改!!! 谨记strcpy大法好!!! 附上原题及代码; 题目:输入三个字符串,按由小到大的顺序输出 1 #include <stdio.h> 2 #include <string.h> 3 4 int main() 5 { 6 char ar[3][10

十九、字符串排序算法

字母表类 一些应用程序可能对字符串的字母表作出限制.在这些应用中,可能常常需要会需要一个API来表示Alphabet类(只是参考,并不会使用该类讨论算法) public class Alphabet { /** * The binary alphabet { 0, 1 }. */ public static final Alphabet BINARY = new Alphabet("01"); /** * The octal alphabet { 0, 1, 2, 3, 4, 5, 6

【华为OJ】【024-字符串排序】

[华为OJ][算法总篇章] [华为OJ][024-字符串排序] [工程下载] 题目描述 编写一个程序,将输入字符串中的字符按如下规则排序. 规则1:英文字母从A到Z排列,不区分大小写.如,输入:Type 输出:epTy 规则2:同一个英文字母的大小写同时存在时,按照输入顺序排列.如,输入:BabA 输出:aABb 规则3:非英文字母的其它字符保持原来的位置.如,输入:By?e 输出:Be?y 样例: 输入: A Famous Saying: Much Ado About Nothing(2012