c语言程序 中文按首字母排序 如何用C语言实现一串中文姓名的排序(首字笔画或者字母)

C\u8bed\u8a00\u7a0b\u5e8f \u6309\u4e2d\u6587\u62fc\u97f3\u7684\u9996\u5b57\u6bcd\u6392\u5e8f \u8981\u6c42\u7a0b\u5e8f\u4e2d\u6709\u4e24\u4e2a\u51fd\u6570\u3002

/**\u5df2\u7ecf\u4fee\u6539\u5982\u4e0b.
*@author:banxi1988
*@date:2010-12-9
*/
#include
#include
#include
#define M 5 /**\u540c\u5b66\u7684\u4eba\u6570 \u5982\u679c\u4f60\u60f3\u591a\u8f93\u5165\u4e9b\u7684\u8bdd\u81ea\u5df1\u6539\u5427. */

void input(char *name[],int n);
void sort(char *name[],int n);

int main(int argc, char **agrv){
char *name[M]; /**\u4fdd\u5b58\u5b66\u751f\u7684\u540d\u5b57.*/
int i= 0;
input(name,M);
sort(name,M);

printf("\u540d\u5b57\u6309\u62fc\u97f3\u6392\u5217\u8f93\u51fa\u5982\u4e0b:\n");
for(i=0;i<M;i++)
{
printf("%s\t",name[i]);
}//for:
printf("\n");

return 0;
}//

void input(char *name[],int n){
char str[20]; /**\u62fc\u97f3\u7684\u957f\u5ea6. 20-1 ,\u81ea\u5df1\u6539 */
int i;
printf("\u8bf7\u8f93\u5165 %d \u4e2a\u5b66\u751f\u7684\u540d\u5b57(\u8bf7\u7528\u62fc\u97f3) :\n",M);

/** \u8fd9\u91cc\u4e5f\u6bd4\u8f83\u5173\u952e,\u597d\u597d\u9886\u4f1a.**/
for(i=0; i < n; i++)
{
scanf("%s",str);
name[i] = (char *)malloc(sizeof(char)*(strlen(str)));
strcpy(name[i],str);

}//for:
}//input


void sort(char *name[],int n){
/**\u5192\u6ce1\u6cd5\u5b9e\u73b0\u6392\u5e8f****************/
char *tmp;
int i,j;
for(i=0;i<n;i++)
{
for(j=1;j<n-i;j++)
{
/***\u4e24\u4e2a\u540d\u5b57\u4f4d\u7f6e\u4ea4\u6362,\u5c06\u8f83\u5927\u7684\u540d\u5b57\u653e\u5230\u6570\u7ec4\u7684\u524d\u9762.*/
if(strcmp(name[j],name[j-1])<0)
{
tmp=name[j-1];
name[j-1]= name[j];
name[j]=tmp;
}
}//inner for
}//outer for

}//sort


/***** \u6d4b\u8bd5\u7ed3\u679c:
\u8bf7\u8f93\u5165 5 \u4e2a\u5b66\u751f\u7684\u540d\u5b57(\u8bf7\u7528\u62fc\u97f3) :
abc cano java perl banxi
\u540d\u5b57\u6309\u62fc\u97f3\u6392\u5217\u8f93\u51fa\u5982\u4e0b:
abc banxi cano java perl

***/

\u6570\u7ec4\u7684\u7b2c\u4e00\u4f4d\u8bbe\u7f6e\u6210\u7b14\u753b\u6570\uff0c\u7b2c\u4e8c\u4f4d\u8bbe\u7f6e\u6210\u9996\u5b57\u6bcd\uff0c\u6392\u5e8f\u65f6\u6839\u636e\u9700\u8981\u9009\u62e9\uff0c\u8f93\u51fa\u65f6\u4ece\u7b2c\u4e09\u4f4d\u8f93\u51fa\u3002
char *name="4w\u738b"\uff1b

#include <stdio.h>
#include <string.h>

#define MAX_NAME 20 //最大名字长度
#define MAX_NUM 100 //最大学生人数

void sort_bubble(char (*pc)[MAX_NAME],int n)//排序函数
{
int i,j;
char str[MAX_NAME];
for(i=0;i<n-1;i++)
{
for(j=i+1;j<n;j++)
{
if(strcmp(pc[i],pc[j])>0)
{
strcpy(str,pc[i]);
strcpy(pc[i],pc[j]);
strcpy(pc[j],str);
}
}
}
}

void display_name(char (*pc)[MAX_NAME],int n)//显示这n个姓名
{
int i;
for(i=0;i<n;i++)
{
printf("%s\n",pc[i]);
}
}
int main()
{
int i=1,n;
char str[MAX_NUM][MAX_NAME];
printf("请输入学生总数:");
scanf("%d",&n);
while(i<=n)
{
printf("请输入第%d个学生姓名:",i);
scanf("%s",str[i++-1]);
}
printf("排序前的学生名单如下:\n");
display_name(str,n);
sort_bubble(str,n);
printf("排序后的学生名单如下:\n");
display_name(str,n);
return 0;
}
说明:
1:采用的是冒泡排序,用快速排序当然快些,但我忘了
2:已验证通过,结果正确。
3:随意输入人数和姓名,只要数组不越界就没有问题!
4:两个函数:排序和显示
5:给分+好评

扩展阅读:c++入门程序代码 ... c#简单程序实例 ... c++必背代码 ... c语言基础知识入门 ... c++新手代码大全 ... c++语言必背入门代码 ... 数字字母 ... c#简单程序代码 ... c语言怎么将字符串排序 ...

本站交流只代表网友个人观点,与本站立场无关
欢迎反馈与建议,请联系电邮
2024© 车视网