簡體   English   中英

按字符串長度在C中排序字符串數組

[英]Sort String Array by String Length in C

我在C中有一個字符串數組。這些字符串存儲需要卸載的文件系統的路徑。

For example...
mountlist[0] = "/proc"
mountlist[1] = "/dev"
mountlist[2] = "/dev/shm"
and so on...

我需要在掛載文件系統之前卸載嵌套文件系統(因此/dev/shm需要在/dev之前卸載)。 我認為最簡單的方法是按長度排序,最長的是。 我將數組中的字符串數存儲在整數i

使用我迄今為止能夠提出的代碼,鑒於strnum是我需要訪問的字符串的整數,可以使用mountlist[strnum]訪問字符串,相應的長度存儲在length[strnum]

總之,如何按最大到最小的長度對數組中的字符串進行排序? 我不需要對字符串進行實際排序,我只需要按正確的順序訪問它們。 我無法弄清楚如何編寫它,但我想的是創建一個int數組的代碼,每個字符串數組的編號順序正確(上面的示例將是{2,0,1}}),所以如果該數組命名為sort然后mountlist[sort[0]]將是最長的字符串。 使用這樣的數組,相應的for循環將是:

for (int q = 0; q < i; q++) {
    umount(mountlist[sort[q]]);
}

您可以將qsort與自定義比較器一起使用:

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

int cmp(const void *first, const void *second) { 
    const char **firstCast = (const char ** )first;
    const char **secondCast = (const char **) second;
    return strcmp(*secondCast, *firstCast);
}
int main(void) {
    const char *a[3];
    a[0] = "longest";
    a[1] = "short";
    a[2] = "medium";
    qsort(a, 3, sizeof(char *), cmp);
    for (int i = 0 ; i < 3; i++) {
        printf("%s\n", a[i]);
    }
}

如果您不想依賴任何“外部”(如qsort),這可能在您的環境中可用或不可用,那么應該這樣做:

for (int j = 0; j < i; ++j) sort[j] = j;

for (int j = 0; j < i - 1; ++j) {
    int longest = j;
    for (int k = j + 1; k < i; ++k) {
        if (length[sort[k]] > length[sort[longest]]) longest = k;
    }
    int tmp = sort[longest];
    sort[longest] = sort[j];
    sort[j] = tmp;
}

暫無
暫無

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

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