c语言姓名首字母排序问题

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

struct Student
{char nam[30];
char sex[7];
int num;};

void Sort(struct Student *stu)
{
int i,j;
struct Student temp;
//开始进行冒泡排序
for(i=0;i<4;i++)
for(j=0;j<4-1;j++)
{
if(strcmp(stu[j].nam[0],stu[j+1].nam[0])<0) //比较首字符的ASCII
{
temp=stu[j]; //互换
stu[j]=stu[j+1];
stu[j+1]=temp;
}
}
}
main ()
{
struct Student stu[4];
int i;
printf("NOW INPUT\n");
for(i=0;i<4;i++) //
{
printf("Input name\n"); //输入姓名
gets(stu[i].nam);
printf("Input sex"); //输入性别
gets(stu[i].sex);
printf("Input number\n"); //输入学号
scanf("%d", &stu[i].num);
}
Sort(stu); //Sort函数
}

各位大哥,这是小弟自己想的,不知道对不对。主要目的是。按学生姓名的首字母排序
比如:Ann Bobby Daive ..... Tina ....

第1个回答  2011-09-12
按照C语言语法,main函数须为void类型;另外,你所编辑的程序段没有输入。就排序方式来讲你所用的是函数的址传递及字符串比较大小的函数,这点没有错误;就理解而言strcmp函数的确可以实现你所需的功能,其大小的比较式按ASCⅡ码值进行的比较,不知道你有没有意识到。追问

你的回答挺有意思!
gets不是输入?scanf不是输入?

第2个回答  2011-09-13
既然你学生姓名是保存在char nam[30];中,用其搜字幕排序就是相当于对nam[0]字符排序,很简单的一件事情,类似于你对整数数组排序一样
第3个回答  2011-09-13

#include <stdio.h>
#include <string.h>
int main()
{
char name[100][15];
char tmp[15];
int n,i,j;
scanf("%d",&n);//名字数
for ( i=0;i<n;i++)
{
scanf("%s",name[i]);
}
for (i=0;i<n;i++)
{
for (j=0;j<n-i-1;j++)
{
if (strcmp(name[j],name[j+1])>0)
{
strcpy(tmp,name[j]);
strcpy(name[j],name[j+1]);
strcpy(name[j+1],tmp);
}
}
}
for (i=0;i<n;i++)
{
printf("%s\n",name[i]);
}

return 0;
}本回答被提问者采纳
相似回答