簡體   English   中英

編寫排序函數來對指針數組進行排序,指向結構

[英]Writing a sorting function to sort an array of pointers, pointing to structures

我正在編寫一個函數來根據郵政編碼的值對指針數組進行排序,指向結構。 我在網上發現了一個排序函數(這是我第一次編寫排序函數),並認為我會玩它並看看會發生什么,我不斷得到錯誤“數組類型'char [7]不可分配'而且我是不知道為什么。有什么想法嗎?

謝謝。

struct personCatalog {
char name[50];
char address[50];
char cityState[50];
char zipCode[7];
} ;

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

void bubble_sort(struct personCatalog *arrayOfPointers[]){
    int num1 = 0;

    while (arrayOfPointers[num1] != NULL) {
    atoi(arrayOfPointers[num1++]->zipCode);
    }

        int progress = 0;

        do {
            int i;
            progress = 0;
            for (i = 0; i < num1 - 2; ++i) {
                if (arrayOfPointers[i]->zipCode > arrayOfPointers[i + 1]->zipCode) {
                    struct personCatalog  temp = *arrayOfPointers[i];
                    arrayOfPointers[i] = arrayOfPointers[i + 1];
                    arrayOfPointers[i + 1] = &temp;

                    progress = 1;
                }
            }
        } while (progress);
    }

我收到錯誤

C語言本身並不知道如何將7個字符分配給7個其他字符。 它只允許您一次將一種基本類型分配給另一種基本類型:

zipCode[0] = temp[0]
zipCode[1] = temp[1];
// etc.

要在C中復制連續的數組(如zipCode ,可以使用memcpy

memcpy(zipCode, temp, 7);

此外,我可能在我的小屏幕上誤讀了你的意圖,但你也不應該為zipCode分配一個結構指針。

這段代碼有幾個問題,但是你得到這個錯誤,因為你試圖在突出顯示的行中為數組賦值; 這就是為什么它抱怨分配給數組類型char[7] 這沒有多大意義,因為您無法更改數組的位置。 您可以通過調用memcpy來交換字節,或者更可能更慣用地更改struct personCatalog的定義,使得zipcode是真正的char *而不是char數組。

該數組由指針組成。 所以你用來交換它們的臨時性也應該是一個指針。

    for (i = 0; i < num1 - 1; ++i) {
            if ( strcmp( arrayOfPointers[i]->zipCode
                       , arrayOfPointers[i + 1]->zipCode
                       ) > 1) {
                struct personCatalog  *temp ;
                temp = arrayOfPointers[i];
                arrayOfPointers[i] = arrayOfPointers[i + 1];
                arrayOfPointers[i + 1] = temp;

                progress = 1;
            }
        }

此外,循環條件i < num1-2是錯誤的。 應該是num1 -1,IMO。

更新:看來zipcode是一個文本字符串,所以我將“>”替換為“strcmp()”

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM