2
我正在使用的程序使用qsort和我自己的比較函數對通過標準輸入讀入的一組單詞進行排序。我將每個字符放入一個指向字符的指針數組中,如下所示。設置指向指針的數組,指向另一個數組中的指針
數組現在有一串字符,例如 - 「\ 0The \ n \ 0brown \ n \ 0fox \ n \ 0is \ n \ 0lazy \ n」 個
我試圖創建的另一個數組指向這個新數組的每個元素指向每個單詞的第一個字母(這種情況是空字符)的指針。因此元素0指向第一個\ 0,元素1指向下一個\ 0。我不確定是否有一個小的語法錯誤,或者如果我有錯誤的想法,但由於輸出從未按正確的順序發生,所以出現問題。下面的代碼:
int buffersize = 2048;
int count = 0;
char* p = (char*) malloc(sizeof(char) * buffersize);
int c;
do{
c = getchar();
p[count++] = (char)c;
if (count == buffersize)
{
p = (char*) realloc(p, buffersize * 2);
buffersize *= 2;
}
}while (c != EOF);
p[count-1] = '\n';
int i = 0;
int a = 1;
char ** pp = (char**) malloc(sizeof(char*) * count);
pp[0] = &p[0];
for (i; i < count; i++)
{
if (p[i] == '\n')
{
while (p[i+1] == '\n')
{i++;}
if (i != (count-1))
{
pp[a++] = &p[i+1];
}
}
}
qsort (pp, (a-1), sizeof(char*), compare);
我比較功能
int rot13cmp (const void* c, const void* d)
{
const char* a = (const char*)c;
const char* b = (const char*)d;
if (a[0] == '\0' && b[0] == '\t')
{
return -1;
}
else if (a[0] == '\t' && b[0] == '\0')
{
return 1;
}
int k = 0;
for (;;k++)
{
if (a[k] == '\n' && b[k] != '\n')
return -1;
if (a[k] != '\n' && b[k] == '\n')
return 1;
if (a[k] == '\n' && b[k] == '\n')
return 0;
int one = (int)a[k];
int two = (int)b[k];
int difference = a[k] - b[k];
if (difference != 0)
return difference;
}
}
謝謝。這解決了我的大部分問題!如果有其他事情發生,我會回來。 –
Np您在本網站上表示感謝,並將其標記爲「該」解決方案。看到上面的答案旁邊的箭頭和綠色檢查。 – WhozCraig
哈哈我沒有足夠的聲望來upvote,但我做了綠色檢查! –