POJ2752:字符串数组排序问题
描述
给定一组字符串,按指定的排序方式输出这些字符串。排序可是自然顺序(inc)、自然逆序(dec)、忽略大小写顺序(ncinc)、忽略大小写逆序(ncdec)等。
输入
输入有多行,第一行为一个表明排序方式的字符串见题面,第二行为字符串的数目。
其余各行每行一个字符串,字符串中间可能空格,前后也可能有空格,但前后的空格要忽略。
输出
输出也有多行,按指定的顺序输出输入的字符串。
样例输入
ncdec
3
Hello World!
You're right!
haha! you're wrong!
样例输出
You're right!
Hello World!
haha! you're wrong!
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
void inc(char *s[],int n){
int i,j;
char *p;
for(i=0;i<n-1;i++)
for(j=0;j<n-i-1;j++)
{
if(strcmp(s[j],s[j+1])>0)
{
p=s[j];
s[j]=s[j+1];
s[j+1]=p;
}
}
for(i=0;i<n;i++)
printf("%s\n",s[i]);
}
void dec(char *s[],int n){
int i,j;
char *p;
for(i=0;i<n-1;i++)
for(j=0;j<n-i-1;j++)
{
if(strcmp(s[j],s[j+1])>0)
{
p=s[j];
s[j]=s[j+1];
s[j+1]=p;
}
}
for(i=n-1;i>=0;i--)
printf("%s\n",s[i]);
}
void ncinc(char *s[],int n){
int i,j;
char *p;
for(i=0;i<n-1;i++)
for(j=0;j<n-i-1;j++)
{
if(strcasecmp(s[j],s[j+1])>0) //不区分大小写比较两个字符串
{
p=s[j];
s[j]=s[j+1];
s[j+1]=p;
}
}
for(i=0;i<n;i++)
printf("%s\n",s[i]);
}
void ncdec(char *s[],int n){
int i,j;
char *p;
for(i=0;i<n-1;i++)
for(j=0;j<n-i-1;j++)
{
if(strcasecmp(s[j],s[j+1])>0)
{
p=s[j];
s[j]=s[j+1];
s[j+1]=p;
}
}
for(i=n-1;i>=0;i--)
printf("%s\n",s[i]);
}
int main()
{
int i,n;
char s[10];
char *string[16]={NULL};
scanf("%s",&s);
scanf("%d",&n);
getchar();
for(i=0;i<n;i++)
{
string[i]=(char *)malloc(sizeof(char)*20); //将字符串存储在string[]中
gets(string[i]);
}
if(strcmp(s,"inc")==0) inc(string,n); //自然顺序(inc)
if(strcmp(s,"dec")==0) dec(string,n); //自然逆序(dec)
if(strcmp(s,"ncinc")==0) ncinc(string,n);
if(strcmp(s,"ncdec")==0) ncdec(string,n);
return 0;
}
string.h库文件中字符串比较大小在windows平台是stricmp,在Linux平台是strcasecmp。提示string.h找不到stricmp函数可以将其换为strcasecmp函数