❶ 排序功能:能實現按部門、教師姓名 的拼音順序排序並顯示排序結果 用c語言
#include <stdio.h>
#include <string.h>
#define STU_NAME_MAX_LEN 20
char stu_name[][STU_NAME_MAX_LEN] =
{
"iker cassilas",
"luis suarez",
"cristiano ronaldo",
"lionl messi"
};
void main()
{
int stu_count = sizeof(stu_name)/sizeof(stu_name[0]);
int i, j, k;
for (i=0; i<stu_count; i++)
{
char firstname[STU_NAME_MAX_LEN];
char familyname[STU_NAME_MAX_LEN];
int blankpos = 0;
//將姓名分開
memset(firstname, 0, STU_NAME_MAX_LEN);
memset(familyname, 0, STU_NAME_MAX_LEN);
for (j=0; j<sizeof(stu_name[i]); j++)
{
if (stu_name[i][j] == ' ')
{
blankpos = j;
break;
}
}
memcpy(firstname, &stu_name[i][0], blankpos);
memcpy(familyname, &stu_name[i][blankpos+1], sizeof(stu_name[i])-blankpos-1);
printf("old: %s %s\n", firstname, familyname);
//排序
for (j=0; firstname[j]!='\0'; j++)
{
for (k=j+1; firstname[k]!='\0'; k++)
{
if (firstname[j] < firstname[k])
{
char ctemp = firstname[j];
firstname[j] = firstname[k];
firstname[k] = ctemp;
}
}
}
for (j=0; familyname[j]!='\0'; j++)
{
for (k=j+1; familyname[k]!='\0'; k++)
{
if (familyname[j] < familyname[k])
{
char ctemp = familyname[j];
familyname[j] = familyname[k];
familyname[k] = ctemp;
}
}
}
printf("new:%s %s\n\n", firstname, familyname);
}
}
❷ 在c語言中我想對漢字字元串按拼音進行排序,可以直接利用strcmp函數來進行排序嗎
ansi GB2312里一級漢字是按拼音排序的,其他的漢字按部首/筆劃排序。所以能按拼音排序的漢字只有3000多個,直接用strcmp()比較就可以了。但是如果用的是Unicode,由於Unicode里的漢字按筆劃順序排序,所以沒有辦法實現按拼音排序。
代碼如下:
#include<stdio.h>#include<string.h>
intmain()
{
chara[5]="王華",b[5]="張麗",c[5]="李強";
chart[5];
if(strcmp(a,b)>0)
{
strcpy(t,a);
strcpy(a,b);
strcpy(b,t);
}
if(strcmp(a,c)>0)
{
strcpy(t,a);
strcpy(a,c);
strcpy(c,t);
}
if(strcmp(b,c)>0)
{
strcpy(t,b);
strcpy(b,c);
strcpy(c,t);
}
printf("%s %s %s ",a,b,c);
return0;
}
(2)c語言根據人名拼音排序擴展閱讀
C語言 strcmp() 函數用於對兩個字元串進行比較(區分大小寫)。
頭文件:string.h
語法/原型:int strcmp(const char* stri1,const char* str2);
參數 str1 和 str2 是參與比較的兩個字元串。
strcmp() 會根據 ASCII 編碼依次比較 str1 和 str2 的每一個字元,直到出現不到的字元,或者到達字元串末尾(遇見 )。
返回值:
如果返回值 < 0,則表示 str1 小於 str2。
如果返回值 > 0,則表示 str2 小於 str1。
如果返回值 = 0,則表示 str1 等於 str2。
❸ 用C語言將4個學生的姓名按拼音首字母從大到小排序並顯示.
一個學生的這樣搞:
姓名分開,成兩個字元串。
分別排序,形成新的字元串,然後輸出。
其他學生一樣的方法。
#include<stdio.h>
#include<string.h>
#defineSTU_NAME_MAX_LEN20
charstu_name[][STU_NAME_MAX_LEN]=
{
"ikercassilas",
"luissuarez",
"cristianoronaldo",
"lionlmessi"
};
voidmain()
{
intstu_count=sizeof(stu_name)/sizeof(stu_name[0]);
inti,j,k;
for(i=0;i<stu_count;i++)
{
charfirstname[STU_NAME_MAX_LEN];
charfamilyname[STU_NAME_MAX_LEN];
intblankpos=0;
//將姓名分開
memset(firstname,0,STU_NAME_MAX_LEN);
memset(familyname,0,STU_NAME_MAX_LEN);
for(j=0;j<sizeof(stu_name[i]);j++)
{
if(stu_name[i][j]=='')
{
blankpos=j;
break;
}
}
memcpy(firstname,&stu_name[i][0],blankpos);
memcpy(familyname,&stu_name[i][blankpos+1],sizeof(stu_name[i])-blankpos-1);
printf("old:%s%s ",firstname,familyname);
//排序
for(j=0;firstname[j]!='