0

マトリックスの文字をアルファベット順に並べ替えて、単一の文字列に書き出そうとしています.たとえば、10個の単語を入力すると、配列に格納され、すべての文字がマトリックス内に配置されます.しかし、単語を書き終えたら、すべての単語のすべての文字をまとめて、すべての文字をアルファベット順に入力したいと思います。

#include <stdio.h>
#include <conio.h>

int main(void){
    int i, j, k, f, n, m; 
    //was trying out various things,that's why I have so many useless ints up there
    char word[10][15],temp;

    for(i=0;i<=9;i++)
    {
        printf("Type in wword number %d: ", i+1);
        gets(word[i]);
    }

    for(k=i-1;k>=0;k--)
    {
        for(m=0;m<k;m++)
            if(word[k][f] > word[m][n])
            {
                temp=word[k][f];
                word[k][f]=word[m][n];
                word[m][n]=temp;
            }
    }
    printf("Letters alphabetically sorted: ");
    for(i=0;i<=9;i++){
        for(j=0;j<=14;j++){
            printf("%d",word[i][j]);
        }
    }
    printf("\n");
    getch();
}

私はまだマトリックスについて学んでいる途中で、今では配列にかなり慣れてきました.しかし、ソートのことは私を混乱させます.これは私の試みでしたが、うまくいきません.すべての単語を書くことができます.そしてクラッシュします。

ここで何が間違っていますか?どうすれば修正できますか?

4

4 に答える 4

3

ここにあなたのコードで:

        temp=word[k][f];
        word[k][f]=word[m][n];
        word[m][n]=temp;

変数は初期化されnfに使用されます。それがクラッシュの原因である可能性が高いです。

于 2011-09-21T06:38:20.237 に答える
1

fn初期化されていません。ガベージがあり、この時点でクラッシュする理由です。

for(k=i-1;k>=0;k--)
{
    for(m=0;m<k;m++)

    if(word[k][f] > word[m][n]) // f,n are uninitialized and are error prone
于 2011-09-21T06:38:25.437 に答える
0

これでうまくいくと思います。実行して教えてください。

void main()    
{

char word[10][15],temp,sorted_word[15];

int i,j,ii,k,l=0;

for(i=0;i<=9;i++)             
{                  
printf("Type in wword number %d: ", i+1);                 
gets(word[i]);            
}


for(i=0;i<=9;i++)

{

for(j=0;word[i][j]!='\0';j++)

{

ii=i;
for(k=j+1;1;k++)
{
if(ii==9 && word[ii][k]=='\0')
break;
if(word[ii][k]=='\0')
{
ii++;
k=0;
}
if(word[i][j]>word[ii][k])
{
temp=word[i][j];
word[i][j]=word[ii][k];
word[ii][k]=temp;
} 
}
sorted_word[l++]=word[i][j];
}

}

sorted_word[l]='\0';

printf("%s",sorted_word);

getch();

}
于 2011-09-22T08:11:40.980 に答える
-1

ここで

for(i=0;i<=9;i++)
{ printf("type in wword %d: ",i+1);
gets(word[i]); 
}

取得 (単語 [1]);

word[1]以降の値を格納しますが、文字配列はword[0]から始まります。

これはあなたの問題の完全な解決策ではないかもしれませんが、この問題はあなたの疑問を解決するのに役立つかもしれません.

于 2011-09-21T06:50:02.227 に答える