题目:输入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,不要用指针直接赋值。