首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

C 語言指針數組排序字符串:完整可運行代碼與詳解

     編輯:程式設計疑難解答

題目:輸入 10 個等長字符串,用指針數組實現排序。關鍵在於「指針數組存儲字符串首地址,排序時僅交換指針,不移動字符串內容」。

標準實現

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

void print(char *arr[], int n);
void sort(char *arr[], int n);

int main() {
    char *arr[10], str[10][20];
    // 讓指針數組指向二維數組每行
    for (int i = 0; i < 10; i++) arr[i] = str[i];

    printf("please input 10 strings:\n");
    for (int i = 0; i < 10; i++) scanf("%s", arr[i]);

    printf("source:\n"); print(arr, 10);
    sort(arr, 10);
    printf("sorted:\n"); print(arr, 10);
    return 0;
}

void print(char *arr[], int n) {
    for (int i = 0; i < n; i++) printf("%s\n", arr[i]);
}

void sort(char *arr[], int n) {
    char *temp;
    for (int i = 0; i < n - 1; i++) {
        int k = i;
        for (int j = i + 1; j < n; j++)
            if (strcmp(arr[k], arr[j]) > 0) k = j;
        if (k != i) {
            temp = arr[i]; arr[i] = arr[k]; arr[k] = temp;
        }
    }
}

核心點解析

  • char *arr[10] 是指針數組,每個元素是 char*
  • arr[i] = str[i] 將二維數組每行首地址賦給指針
  • scanf("%s", arr[i]) 直接寫入二維數組內存,指針無需變動
  • 排序時交換 arr[i] 指針值,str 內容不動,效率極高

此模式廣泛用於大數據排序(如 qsort 回調)。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved