我必須使用Bubble Sort技術按字典順序排序字符串,而不使用任何庫函數。我寫了下面的代碼在排序字符串時工作正常。
但問題是,如果我給Ñ作爲輸入(比如N = 4),I只能輸入n-1個字符串(僅3個字符串)。 該問題可以通過運行for循環從0到n來解決,但這不是一個合理的解決方案。
我在這裏做錯了什麼?C:字符串數組 - 只能輸入n-1個字符串,輸入大小爲n
#include <stdio.h>
#include <string.h>
#include <malloc.h>
void swap(int indx[], int j)
{
int temp;
temp = indx[j];
indx[j] = indx[j+1];
indx[j+1] = temp;
}
void sort(char **str, int indx[], int n)
{
int i, j, k;
for(i=0; i<n; i++)
{
for(j=0; j<n-i-1; j++)
{
k = 0;
while(str[j][k] != '\0')
{
if((str[indx[j]][k]) > (str[indx[j+1]][k]))
{
swap(indx, j);
break;
}
else if((str[indx[j]][k]) < (str[indx[j+1]][k]))
break;
else
k++;
}
}
}
}
void display(char **str, int indx[], int n)
{
int i;
printf("Sorted strings : ");
for(i=0; i<n; i++)
printf("%s\n", str[indx[i]]);
}
int main(void)
{
char **str;
int n, i, j, *indx;
printf("Enter no. of strings : ");
scanf("%d", &n);
str = (char **) malloc (n * (sizeof(char *)));
indx = (int *) malloc (n * sizeof(int));
for(i=0; i<n; i++)
str[i] = (char *)malloc(10 * sizeof(char));
printf("Enter the strings : ");
for(i=0; i<n; i++)
{
gets(str[i]);
indx[i] = i;
}
sort(str, indx, n);
display(str, indx, n);
}
我不明白... 1)爲什麼你只輸入n-1字符串?你沒有說出什麼問題。 2)爲什麼從0到n運行循環是「不合邏輯的」? – 2013-05-08 15:33:18
注意:C標準說''malloc()'在''(不是'')中聲明;它也不會談論任何名爲''的頭文件。 –
pmg
2013-05-08 15:34:36
@KScottPiel爲了回答你的第一個問題,我們以這個例子爲例,如果我給「輸入字符串數」4,那麼我實際上只能輸入3個字符串。 要回答你的第二個問題,如果我們從0開始數組索引,我們通常會達到n-1。所以如果我們遍歷從0到n的數組,我們實際上遍歷了一個額外的元素,這根據我的知識是不合邏輯的。 – titan7585 2013-05-08 15:39:56