如何将排序结构与字符串合并?

问题描述 投票:0回答:3

我正在尝试修改常见的mergesort,以对字符串结构进行排序。但是我不知道怎么了。在带有strcpy()和strcmp()的每一行上都会显示一条警告,告诉您:

warning: passing argument 1 of 'strcpy' makes pointer from integer without a cast [-Wint-conversion]|
C:\Program Files (x86)\CodeBlocks\MinGW\include\string.h|45|note: expected 'char *' but argument is of type 'char'|

并且建议我在char L [n1]和R [n2]上加上*”>

But even if i declare 
char *L[n1] 
char *R[n2]

它总是在strcpy()甚至在strcmp()处停止。 。 。我不明白为什么。有没有人知道如何strcpy和strcmp这两个?

struct kegiatan{

     char nama[50];
};

void merge(struct kegiatan *keg, int low, int mid, int high){

    int i, j, k;

    int n1 = mid - low + 1;
    int n2 = high - mid;
    char L[n1];
    char R[n2];

    for(i = 0; i < n1; i++){
        strcpy(L[i], keg[low + i].nama);        // the program always stops here.
    }
    printf("L = %s", L[i]);
    printf("keg = %s", keg[low + i].nama);
    system("pause");
    for(j = 0; j < n2; j++){
        strcpy(R[j], keg[mid + 1 + j].nama);
    }

    i = 0;
    j = 0;
    k = low;

    while(i < n1 && j < n2){
        if(strcmp(L[i], R[j]) < 0){
            strcpy(keg[k].nama, L[i]);
            i++;
        } else{
            strcpy(keg[k].nama, R[j]);
            j++;
        }
        k++;
    }
     while (i < n1) { 
        strcpy(keg[k].nama, L[I]); 
        i++; 
        k++; 
     }

    while(j < n2) {
        strcpy(keg[k].nama, R[j]);
        j++;
        k++;
    }

}

void mergesort(struct kegiatan *keg, int low, int high){

    if(low < high){
        int mid = (low + high) / 2;

        mergesort(keg, low, mid);
        mergesort(keg, mid + 1, high);
        merge(keg, low, mid, high);
    }

}

我正在尝试修改常见的mergesort,以对字符串结构进行排序。但是我不知道怎么了。在带有strcpy()和strcmp()的每一行上都会显示一条警告,告知:警告:...

c mergesort
3个回答
1
投票

[您误用了char的字符串。在这里strcpy(L[i], keg[low + i].nama);您没有将一个字符串复制到另一个。您正在将一个字符串复制到数组L的一个元素。


1
投票

考虑使用qsort中内置的<stdlib.h>功能。


1
投票

首先我在您的代码中看到:

© www.soinside.com 2019 - 2024. All rights reserved.