题目:输入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; }