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

C語言冒泡排序字符串指針數組的常見錯誤修正版

     編輯:程式設計綜合問答

原代碼三大語法錯誤

  1. 調用語法錯誤:void bubsort(name,9); 不能在調用時帶類型修飾符,應為 bubsort(name, 9);。
  2. 打印解引用錯誤:printf("%s ", *name[i]); 同前文,*name[i] 取到首字符導致格式不匹配,應為 name[i]。
  3. 排序邏輯缺陷:交換時使用 char d 僅交換首字符,應交換指針 char *tmp = name[i]; name[i] = name[i+1]; name[i+1] = tmp;。

修正後完整代碼

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

void bubsort(char *name[], int n) {
    int i, j, k = 0, m = n - 1;
    while (k < m) {
        j = m - 1;
        for (i = 0; i <= j; i++)
            if (strcmp(name[i], name[i+1]) > 0) {
                char *tmp = name[i];
                name[i] = name[i+1];
                name[i+1] = tmp;
                m = i;
            }
        for (i = n-1; i >= 1; i--)
            if (strcmp(name[i-1], name[i]) > 0) {
                char *tmp = name[i];
                name[i] = name[i-1];
                name[i-1] = tmp;
                k = i;
            }
    }
}

int main() {
    int i;
    char *name[] = {"zhang","gou","xu","zheng","mao","zhao","li","bai","qing"};
    for (i = 0; i < 9; i++) printf("%s ", name[i]);
    bubsort(name, 9);
    printf("\n");
    for (i = 0; i < 9; i++) printf("%s ", name[i]);
    printf("\n");
    return 0;
}

關鍵點總結

  • strcmp 返回值判斷:>0 表示前者大,需交換。
  • 指針數組排序本質是交換指針值,不移動字符串內容,效率高。
  • 主函數返回類型應為 int,並返回 0。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved