百练_2752:字符串数组排序问题

描述

给定一组字符串,按指定的排序方式输出这些字符串。排序可是自然顺序(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);
		gets(string[i]);
    }
	if(strcmp(s,"inc")==0)    inc(string,n);
	if(strcmp(s,"dec")==0)    dec(string,n);
	if(strcmp(s,"ncinc")==0)  ncinc(string,n);
	if(strcmp(s,"ncdec")==0)  ncdec(string,n);

	return 0;


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值