當前位置:首頁 » 編程語言 » c語言根據人名拼音排序
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言根據人名拼音排序

發布時間: 2022-07-04 03:09:01

❶ 排序功能:能實現按部門、教師姓名 的拼音順序排序並顯示排序結果 用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]!='';j++)
{
for(k=j+1;firstname[k]!='';k++)
{
if(firstname[j]<firstname[k])
{
charctemp=firstname[j];
firstname[j]=firstname[k];
firstname[k]=ctemp;
}
}
}
for(j=0;familyname[j]!='';j++)
{
for(k=j+1;familyname[k]!='';k++)
{
if(familyname[j]<familyname[k])
{
charctemp=familyname[j];
familyname[j]=familyname[k];
familyname[k]=ctemp;
}
}
}
printf("new:%s%s ",firstname,familyname);
}
}

❹ 求高人指教,C語言中,漢字姓名怎麼按字典順序排列

字典是按照拼音排序的,沒有現成的拼音排序功能。
你可以自己做鍵值表對應啊。就是做數據,把百家姓和其拼音組合對應的表,可以用文件存儲,也 可以用資料庫存儲,或者乾脆直接寫在代碼了,用結構數組或鏈表載入。
然後需要排序的時候,直接用結構數組或鏈表排序啊。
如果你除了姓,連名字都要算在排序中,那你得把整個漢字字典的文字都做成鍵值表,別人起名字用什麼字,誰能知道。那你這就純粹是數據問題了。
我剛才試了一下網路搜索,網路文庫里有現成的漢字拼音對照表,你可以試試,全不全我就不知道了。

❺ 如何用C++實現對姓名按拼音排序

這里的要點在ASCII值,每個字母都有對應的ASCII值,所以只需比較姓名的ASCII值就可以了(如果按照abc的順序排列就是按照ASCII值從小到大排列),
#include <string.h>
#include <iostream.h>
void main()
{

char str[4][10]={"ccc","aaa","bbb","ddd"};//定義四個字元串
char *p[4];
for(int y=0;y<4;y++)
{
p[y]=str[y];
}
for(int i=0;i<3;i++)
{
for(int j=i+1;j<4;j++)
{
char temp[10];
if(*p[i]>*p[j])//比較str[i]和str[j]的ASCII值大小
{
temp[10]=*p[i];//將str[i]賦給temp[10]
*p[i]=*p[j];
*p[j]=temp[10];
}
}

}
for(int k=0;k<4;k++)
cout<<str[k]<<endl;
}

❻ 利用指針將輸入的10個同學的姓名按拼音全拼升序排序

c語言是這樣的
#include <stdio.h>
void main()
{
void select_sort(int *, int);
int *p,i,a[10];
p=a;
printf("Input 10 numbers:\n");
for(i=0;i<10;i++)
scanf("%d",p++);
p=a;
select_sort(p,10); // select_sort(a,10);
printf("The sorted numbers:\n");
for(p=a,i=0;i<10;i++)
{
printf("%d ",*p++);
}
printf("\n");
}
void select_sort(int *x, int n)
{
int i, j, k, temp;
for(i=0; i<n-1; i++)
{
k=i;
for(j=i+1; j<n; j++)
if(*(x+k)<*(x+j)) k=j;
if(k!=i)
{
temp=*(x+i); *(x+i)=*(x+k); *(x+k)=temp;
}
}
}

開始看錯了是姓名排序哦,應該這樣
#include <stdio.h>
#include <string.h>
void input(char (*p)[10],int n)
{
int i; //int
for(i=0;i<n;i++)
{
printf("input第%d個姓名:",i+1);
scanf("%s",&p[i]);
printf("\n");
}
}
void output(char (*p)[10],int,n)
{
int i;
printf("排序之後為:");
for(i=0;i<n;i++)
{
printf("%s", p[i]);
printf("\n");
}
}
void sort(char (*p)[10],int n)
{
int i,j;
char t[10];//----------------
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
if(strcmp(p[i],p[j])>0)
{

strcpy( t,p[i] );
strcpy( p[i],p[j] );
strcpy( p[j],t);
}
}
int main()
{
char s[4][10];
input(s,4);
sort(s,4);
output(s,4);
system("pause");
return 0;
}

❼ c語言中如何將姓名按拼音排序

只要使用GBK編碼轉化後存儲,自然排序即可

❽ c語言怎麼用姓名(漢字)進行排序

排序後輸出的:(是以字母表從小到大排)
#include <iostream>
#include <string>
using namespace std;
int main()
{
string s[4]={"大軍","阿姨","弟弟","妹妹"},t;
for(int i=0;i<4;i++)
{
for(int j=i;j<4;j++)
{
if(s[i]>s[j])
{
t=s[i];
s[i]=s[j];
s[j]=t;
}
}
}
for(i=0;i<4;i++)
cout<<s[i]<<endl;
return 0;
}

❾ c語言輸入N個姓名拼音,找出按字母順序排在最前的拼音

調試了一下,問題在字元串操作。

最簡單的辦法是使用系統提供的字元串操作函數。

修改代碼和注釋如下:

#include<stdio.h>

#include<string.h>//增加字元串操作支持

#defineN5

intmain()

{

charcs[N][20],temp[20]="0";//定義時初始化字元串數組

inti,p,maxLen;

printf("inputnames: ");

for(i=0;i<N;i++)

gets(cs[i]);

printf(" ");

//temp[20]="0";//字元串操作不能直接賦值,使用strcpy函數

for(i=1;i<N;i++)

{//對二維數組的行進行循環

//if(cs[i]<temp)

if(strcmp(cs[i],temp)<0)//字元串比較使用strcmp函數

strcpy(temp,cs[i]);//字元串賦值,使用strcpy函數

}

printf("Thenameis:%s ",temp);

return0;

}

在VC6編譯通過,如下圖:

供參考。

❿ 輸入五個人的姓名拼音然後倒序輸出用c語言如何編程

#include<stdio.h>

#include<string.h>

int main()

{

char a[111]={''},b[6][33]={''};

int k=0,j=0;

gets(a);//輸入一個字元串

for(int i=0;i<strlen(a);i++)

{

if(a[i]!=' ')

b[k][j++]=a[i];//將每個名字存入二維數組的每一行中

else

{

k++;

j=0;

}

}

for(int i=0;i<=k;i++)

{

for(int j=strlen(b[i])-1;j>=0;j--)

{

printf("%c",b[i][j]);

}

printf(" ");

}

return 0;

}