繁体   English   中英

错误:在使用选择排序时分配给具有数组类型的表达式

[英]Error: assignment to expression with array type while using selection-sort

基本上,我试图sort用3名的议程selection sort方法。 很确定选择排序部分没问题。 问题是,显然我的代码可以识别字符串的 [0] 个字符,但不能将一个字符串传递给另一个变量。 这是我的代码:

include <stdio.h>

typedef struct{
    char name[25];
} NAME;

int main(){

    int a, b;
    char x, y[25];

    static NAME names[]={
        {"Zumbazukiba"},
        {"Ademiro"},
        {"Haroldo Costa"}
    };

    for(a=0; a<4; a++){

        x = names[a].name[0];
        y = names[a];

        for(b=(a-1); b>=0 && x<(names[b].name[0]); b--){
            names[b+1] = names[b];
        }
        names[b+1].name = y;
    }
}

我不断收到此错误消息:

main.c:21:11: 错误:赋值给数组类型为 y = names[a] 的表达式;

在您的编译器标记的行中,您的代码中至少有两个错误。 首先,你不能复制字符串(或实际上,任何其他阵列型),使用简单赋值( = )运算符在C -你需要使用strcpy函数(其需要#include <string.h>管线您的代码)。

其次,您已将y声明为字符数组( char y[25] ),但names是一个NAME结构数组; 大概,您想将给定结构的name字段复制到y

所以,而不是:

y = names[a];

你应该使用:

strcpy(y, names[a].name);

随时要求进一步澄清和/或解释。

对于初学者,我没有看到选择排序。 看来您的意思是插入排序。

数组没有赋值运算符。 所以像这样的陈述

names[b+1].name = y;

您尝试分配数组的位置无效。

在这样的陈述中

y = names[a];

您正在尝试将结构类型的对象分配给字符数组。

此外,循环也是不正确的。

该数组只有 3 个元素。 所以目前还不清楚这个循环中的神奇数字 4 在做什么

for(a=0; a<4; a++){

这个循环

for(b=(a-1); b>=0 && x<(names[b].name[0]); b--){

当 a 等于 0 时跳过第一次迭代。

这是一个演示程序,展示了如何将选择排序应用于数组元素。

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

#define LENGTH  25

typedef struct
{
    char name[LENGTH];
} NAME;

int main(void) 
{
    NAME names[] =
    {
        { "Zumbazukiba" },
        { "Ademiro" },
        { "Haroldo Costa" }
    };

    const size_t N = sizeof( names ) / sizeof( *names );

    for ( size_t i = 0; i < N; i++ )
    {
        puts( names[i].name );
    }

    putchar( '\n' );

    for ( size_t i = 0; i < N; i++ )
    {
        size_t min = i;

        for ( size_t j = i + 1; j < N; j++ )
        {
            if ( strcmp( names[j].name, names[min].name ) < 0 )
            {
                min = j;
            }
        }

        if ( i != min )
        {
            NAME tmp = names[i];
            names[i] = names[min];
            names[min] = tmp;
        }
    }


    for ( size_t i = 0; i < N; i++ )
    {
        puts( names[i].name );
    }

    putchar( '\n' );

    return 0;
}

程序输出是

Zumbazukiba
Ademiro
Haroldo Costa

Ademiro
Haroldo Costa
Zumbazukiba

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM