0

ライブラリ関数を使用せずに、バブル ソート手法を使用して文字列を辞書順に並べ替える必要があります。文字列の並べ替えで正常に機能する次のコードを作成しました。

しかし、問題は、入力として n ( n = 4 など) を指定すると、n-1文字列 (3 文字列のみ) しか入力できないことです。この問題は、for ループを 0 から 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);
}
4

3 に答える 3

0

文字列を入力する必要がある行でこれを試してください。それ以外の:

gets(str[i]);

タイプ:

scanf("%s",str[i]);
于 2014-01-18T10:36:37.540 に答える