用C语言将4个学生的姓名按拼音首字母从大到小排序并显示.
调试了一下,问题在字符串操作。
最简单的办法是使用系统提供的字符串操作函数。
修改代码和注释如下:
#include#include //增加字符串操作支持#define N 5int main(){ char cs[N][20],temp[20]="0";//定义时初始化字符串数组 int i,p, maxLen; printf("input names:
"); 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("The name is:%s
", temp); return 0;}在VC6编译通过,如下图:
供参考。
参考下面
#include
#include
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("
");
}
}
void output(char (*p)[10],int,n)
{
int i;
printf("排序之后为:");
for(i=0;i<n;i++)
{
printf("%s", p[i]);
printf("
");
}
}
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;
}
一个学生的这样搞:
姓名分开,成两个字符串。
分别排序,形成新的字符串,然后输出。
其他学生一样的方法。
#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
", 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
", firstname, familyname);
}
}
用C语言将4个学生的姓名按拼音首字母从大到小排序并显示.
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_
一个C语言程序,将输入的几个姓氏拼音按首字母的顺序重新输出。为什么输 ...
include<stdio.h> include<string.h> void fsort(char cname[][6],int n){ int i,j,k;char temp[6]={0};for(k=1;k<n-1;k++)for(j=0;j<n-k-1;j++)if (cname[j][0]>cname[j+1][0]){ strcpy(temp,cname[j]);strcpy(cname[j],cname[j+1]);strcpy(cname[j+1],t...
...的字符串数组a 4 10,从键盘输入这四个学生的名字 (名字长度小于10...
char ID[20];\/\/学号 char Name[20];\/\/姓名 float math;\/\/成绩1 float chinese;\/\/成绩2 float english;\/\/成绩3 };int main(){ STU myStu[10];for(int i = 0; i < 10;i++){ printf("请输入第%d个学生的信息\\n",i+1);printf("学号:");scanf("%s",myStu[i].ID);printf("...
c语言姓名首字母排序问题
按照C语言语法,main函数须为void类型;另外,你所编辑的程序段没有输入。就排序方式来讲你所用的是函数的址传递及字符串比较大小的函数,这点没有错误;就理解而言strcmp函数的确可以实现你所需的功能,其大小的比较式按ASCⅡ码值进行的比较,不知道你有没有意识到。
c语言排序姓名首字母的流程是怎样的呢?我想做流程图
int main(){ int m,n,k,l;do{ scanf("%d%d",&n,&m);}while(m<n||m<0||n<0);k=max_coumon_divisor(n,m);l=min_coumon_multiple(n,m);printf("%d %d",k,l);return 0;} int max_coumon_divisor(int n,int m){ int k,l;k=n;while(k%m!=0) k=k+n;l=m*n\/k...
如何用C语言实现一串中文姓名的排序(首字笔画或者字母)
数组的第一位设置成笔画数,第二位设置成首字母,排序时根据需要选择,输出时从第三位输出。char *name="4w王";
编程输入3个学生的姓名,按首字母升序输出
\/\/C语言给你写的#include<stdio.h>#include<string.h>int main(){char name[3][20];char str[20];int i,j;scanf("%s %s %s",name[0],name[1],name[2]);for(i=0;i<2;i++) \/\/排序采用冒泡排序法for(j=i+1;j<3;j++)if(strcmp(name[i],name[j])>0){strcpy(str,name...
在c语言中我想对汉字字符串按拼音进行排序,可以直接利用strcmp函数来进 ...
ansi GB2312里一级汉字是按拼音排序的,其他的汉字按部首\/笔划排序。所以能按拼音排序的汉字只有3000多个,直接用strcmp()比较就可以了。但是如果用的是Unicode,由于Unicode里的汉字按笔划顺序排序,所以没有办法实现按拼音排序。代码如下:include<stdio.h>#include<string.h> int main(){ char a[5]...
c语言用数组做通讯录 怎样将联系人的姓名首字母排序 并且输出 求大侠...
排序部分 for(j=0;j<n-1;j++){ for(i=0;i<n-1-j;i++){ if((strcmp(wds[i],wds[i+1]))>0)\/\/每个数组元素都是字符串 { t=wds[i];wds[i]=wds[i+1];wds[i+1]=t;}\/\/冒泡排序 } } 输出部分 for(k=0;i<n;k++){ puts(wds[i]);} ...
一个数组里有各种中文人名,怎样按拼音首字母把里面的元素分别存到另外的...
那得先知道所有姓的拼音第一个字母啊。我是很想帮你,我也会写。就是不知道这个每个字所对应的拼音啊。如果有了就好做了。用搜狗拼音的码表也可以。就是分数太少了。这里面用到的了比较多的技术,有排序,二分查找,有HASH,等等。