C语言编程实现:输入10个学生的名字(不超过20个字符),按名字降序排序输出

C语言编程实现:输入10个学生的名字(不超过20个字符),按名字降序排序输出,第1张

//参考:
#include <stringh>
#include <stdioh>
int main()
{
    char name[10][20], temp[20];
    int i,j;
    for (i = 0; i < 10; ++i){
        scanf ("%s", name[i]);
    }
    for (i = 0; i < 10; ++i){
        for (j = i+1; j < 10; ++j){
            if (strcmp(name[i], name[j]) < 0){
                strcpy(temp, name[i]);
                strcpy(name[i], name[j]);
                strcpy(name[j], temp);
            }
        }
    }
    for (i = 0; i < 10; ++i){
        printf ("%s\n", name[i]);
    }
    return 0;
}

一个学生的这样搞:

姓名分开,成两个字符串

分别排序,形成新的字符串,然后输出。

其他学生一样的方法。

#include <stdioh>
#include <stringh>
#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);
    }
}

#include <stdioh>
#include <stringh>
int main()
{
char string[10][50], temp[50];
printf("请输入6个单词:\n");
for(int i = 0; i < 6; i++)
scanf("%s", string[i]);
/冒泡排序/
for(int i = 0; i < 5; i++ )
for(int j = i+1; j < 6; j++)
if(strcmp(string[i], string[j]) == 1)//比较字符串大小,可以用strcmp
{
strcpy(temp, string[i]) ;//交换要strcpy
strcpy(string[i], string[j]) ;
strcpy(string[j], temp) ;
}
//输出
printf("输出排好序的6个单词:\n");
for(int i = 0; i < 6; i++ )
puts(string[i]);
return 0;
}

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

试了试,可以排序啊。有几个简单的错误不知道是不是因为你提问时打错了。第一个,printf提示是不能直接用汉语的吧。还有就是if(strcmp(name[min],name[j]>0))括号加的不大对,if(strcmp(name[min],name[j])>0)然后,我输入就可以了。什么内存错误,没有发现。如果有问题,请及时补充。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/yw/13322481.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-14
下一篇 2023-07-14

发表评论

登录后才能评论

评论列表(0条)

保存