【C语言】输入字符串数组并排序

题目:输入n个字符串,并按照一定规则进行升序排序和输出

我的排序规则:按照字符串里面英文字符的值之和

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<ctype.h>
#define MAXNUM 10
#define MAXLEN 20

int mystrcmp(char *s1,char*s2)            //可按照规则自行修改
{
    
    
	if(s1==NULL||s2==NULL)
	{
    
    	
		return -1;
	}
	int count1=0,count2=0,i;
	for(i=0;i<strlen(s1);i++)             //计算字符串的全部英文字符之和
	{
    
    
		if(isalpha(s1[i]))
		{
    
    
			count1+=s1[i];
		}
	}
	for(i=0;i<strlen(s2);i++)
	{
    
    
		if(isalpha(s2[i]))
		{
    
    
			count2+=s2[i];
		}
	}
	return count1-count2;           //升序
}

void strsort(int n)
{
    
    
	int j=n;
	char **s;
	s=(char **)malloc(sizeof(char*)*n); 
	int i=0;
	while(--j>=0)
	{
    
    
		if(NULL==(*(s+i)=(char*)malloc(sizeof(char)*MAXLEN)))
		{
    
    
			printf("分配内存失败\n");
			return;
		}			
		scanf("%s",s[i++]);      //或gets(s[i++]);两者输入的不同在前面的文章有提到,注意区别
	}

	for(int k=0;k<n-1;k++)             //冒泡排序
		for(int t=0;t<n-k-1;t++)
		{
    
    
			if(mystrcmp(s[t],s[t+1])>0)
			{
    
    
				char temp[MAXLEN];
				strcpy(temp,s[t]);
				strcpy(s[t],s[t+1]);
				strcpy(s[t+1],temp);
			}
		}
	for(i=0;i<n;i++)                  //打印排序后的字符串
	{
    
    
	printf("%s\n",s[i]);
	}
}
int main()
{
    
    
	int n=0;
	scanf("%d",&n);
	if(n==0||n>MAXNUM)
	{
    
    
		printf("输入非法!\n");
		return 0;
	}
	printf("请输入%d个字符串\n",n);
	strsort(n);
	return 0;
}

结果:
在这里插入图片描述
注意点:
1.scanf输入字符串遇到空格、TAB和回车就会当作一次输入结束;若想输入带有空格的字符串用gets(参考前面的文章);
2.字符串赋值要用strcpy,不要用指针直接赋值。

猜你喜欢

转载自blog.csdn.net/yechongbinbin/article/details/114639333