該程式可以對輸入的字串進行排序,windows中以ctrl+z結束。程式的思路是利用指標陣列,指向儲存在alloc函式分配的空間中的字串,使用qsort函式進行比較。在qsort函式中,將key也就是待回歸的值變為指標變數來儲存指標陣列中的位址,然後利用這個位址和其它指標陣列中的位址傳進strcmp函式中,來逐字比較字串的大小,最後進行指標指向位址的交換。readline函式主要起乙個讀入輸入的值以及為它們分配空間的作用,所以它包含alloc函式和getline函式,該函式最後返回讀入字串的行數。writeline函式主要起將指標陣列指向的字串輸入的作用。afree函式在這個程式中並未使用,因為沒有其它需要重新從頭寫入的操作,alloc函式的缺點就是分配空間的方式是一種假的晚繫結,不管是否使用該函式,它永遠會占用空間,不過在目前,可以用於理解記憶體分配是如何進行的。
下面是**段:
#include #include #include #define maxline 100
#define maxlen 1000
char *lineptr[maxline];
int readline(char **lineptr, int maxlines);
void writeline(char **pstr, int length);
void qsort(char **pstr, int left, int right);
int main()
else
return 0;
}int getline(char *pstr, int length)
if(c == '\n')
pstr[nidx] = '\0';
return nidx;
}int readline(char **lineptr, int maxlines)
else
}return nlines;
}void writeline(char **pstr, int length)
}void qsort(char **pstr, int left, int right)
int i = left;
int j = right;
char *key = pstr[left];
while(i < j)
pstr[i] = pstr[j];
while(i < j && strcmp(key, pstr[i]) >= 0)
pstr[j] = pstr[i];
}pstr[i] = key;
qsort(pstr, left, i - 1);
qsort(pstr, i + 1, right);
}#define allocsize 100000
static char challocbuf[allocsize];
static char *allocp = challocbuf;
char *alloc(int nsize)
else
}void afree(char *pstr)
}
字串 字串排序
頻率統計 將頻率轉換為索引 資料分類 回寫頻率統計 統計每個字元出現的次數 將頻率轉換為索引 確定不同字元首位置 從右到左檢查檢查鍵中的字元 public class lsd public class msd public static void sort string a private stat...
《演算法》 字串 字串排序
輸入字串和字串對應的組別 組別也是字串的鍵 在滿足組別有小到大排序的情況下,將字串按字母順序排序 第一步,記錄組別的頻率 為了得到某個字串在排序後的範圍,比如組別2肯定在組別1後面,在組別3前面,把每個組別有多少個人記錄下來,方便我們定位 第三步,分類 該組別的位置起點 向後挪一位 因為當前位被用了...
字串排序
從鍵盤輸入10個學生的姓名和成績,請按字典序排列學生的姓名並輸出 姓名和成績對應關係保持不變 輸入共11行,前10行每行是乙個學生的姓名,最後一行是10個用空格分開的整數表示對應的10個學生成績。輸出姓名按字典序排列後的學生姓名和成績,共10行,每個學生的姓名和成績佔一行,姓名和成績間用逗號分開。b...