sdustoj 规范序排列
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sdustoj 规范序排列相关的知识,希望对你有一定的参考价值。
Description
规范序是一种对字符串比较的排序规则,定义如下:
1 串长小的排在前面;
2 相同串长的按照字典序排列顺序。
串的字典序遵循如下递归定义:
1 两串的前n-1个字符相同,第n个字符字典序小的排在前面;
2 只有两串的字符完全相同时,才有两串相等。
字符的字典序即按照字母排列的顺序,即a, b, ..., z。ASCII码范围内的字符串的字典序比较可以用strcmp()函数(原型和功能见HINT)完成。
Input
第一行输入为一个整数N(N<=100),后接N行,每行一个字符串。每个字符串仅由小写字母“a”~“z”组成,长度不超过10个字符。
Output
输出为N行,按照字符串的规范序排列,规范序小的排前面。
Sample Input
10
abc
bc
aca
ca
c
aac
aba
bc
da
ba
Sample Output
c
ba
bc
bc
ca
da
aac
aba
abc
aca
HINT
原型: int strcmp(const char *s1,const char * s2);
功能:比较字符串s1和s2。
当s1<s2时,返回值<0
当s1==s2时,返回值=0
当s1>s2时,返回值>0
在拿到题目的瞬间,自己就暗示自己不会做,其实想想就是一个简单的排序。
代码如下:
1 #include<stdio.h> 2 #include<string.h> 3 #include<ctype.h> 4 int main() 5 { 6 int m; 7 scanf("%d",&m); 8 getchar(); 9 char a[100][100]={0}; 10 int i; 11 for(i=0;i<m;i++) 12 gets(a[i]); 13 int j; 14 int x,y; 15 char s[110]={0}; 16 for(i=0;i<m;i++) 17 for(j=0;j<m-i;j++) 18 { 19 x=strlen(a[j]); 20 y=strlen(a[j+1]); 21 if(x>y) 22 { 23 strcpy(s,a[j]); 24 strcpy(a[j],a[j+1]); 25 strcpy(a[j+1],s); 26 } 27 else if(x==y) 28 { 29 if(strcmp(a[j],a[j+1])>0) 30 { 31 strcpy(s,a[j]); 32 strcpy(a[j],a[j+1]); 33 strcpy(a[j+1],s); 34 } 35 } 36 } 37 for(i=0;i<m;i++) 38 printf("%s\n",a[i]);
39 return 0; 40 }
不能用数组存储字符串的长度,因为在进行字符串交换时,数组中存储的长度并没有交换。
以上是关于sdustoj 规范序排列的主要内容,如果未能解决你的问题,请参考以下文章