-3

完全に塗りつぶされたクロスワードがあり、水平方向の単語をスキャンして新しい配列に配置するプログラムを実行したいと考えています。クロスワードは 20x20 配列で、新しい配列は 40x20 になります。元。次のような 3 つの水平方向の単語を見つけた場合: 40x20 は
犬のように見える必要があります --> 最初の行
cat
fish
0
...
0 --> 40 行目
(40x20 = 40 行であるため、最大単語数は 40 になります)単語ごとに1行...これまでに行ったことはそれほど多くありません.....

#include<stdio.h>
char cross[20][20]={
                {'*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*'},
                {'*','T','Y','P','E','*','*','*','*','G','U','I','T','A','R','I','S','T','*','*'},
                {'*','E','*','*','V','A','I','N','*','A','*','*','*','V','*','*','T','*','I','*'},
                {'*','R','O','M','E','*','*','*','*','M','A','R','R','I','A','G','E','*','N','*'},
                {'*','R','*','*','N','O','O','D','L','E','*','O','*','A','*','*','A','N','T','*'},
                {'*','I','N','*','*','*','*','O','*','*','*','P','E','T','R','O','L','*','I','*'},
                {'*','F','*','C','*','C','U','T','*','L','I','E','*','I','*','A','T','O','M','*'},
                {'*','I','*','O','*','U','*','*','M','*','N','*','M','O','U','T','H','*','A','*'},
                {'*','E','N','V','E','L','O','P','E','*','F','*','I','N','*','H','*','A','T','*'},
                {'*','D','*','E','*','T','*','*','A','*','E','*','N','*','*','*','A','G','E','*'},
                {'*','*','A','R','T','*','I','N','T','E','R','I','O','R','*','A','*','O','*','*'},
                {'*','K','*','*','O','*','R','*','*','A','T','*','R','O','B','B','E','R','Y','*'},
                {'*','A','T','*','A','I','R','*','S','T','I','R','*','O','*','O','*','A','*','*'},
                {'*','N','O','*','S','*','I','T','*','*','L','*','S','M','I','L','E','*','S','*'},
                {'*','G','*','*','T','*','T','*','O','*','I','*','O','*','N','I','G','H','T','*'},
                {'*','A','C','E','*','M','A','N','D','A','T','O','R','Y','*','T','O','*','O','*'},
                {'*','R','*','N','Y','*','T','*','E','*','Y','*','T','*','*','I','*','*','P','*'},
                {'*','O','*','D','O','*','E','*','*','*','*','I','*','O','Z','O','N','E','*','*'},
                {'*','O','N','*','U','N','D','E','R','W','A','T','E','R','*','N','O','U','N','*'},
                {'*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*','*'}
};
int main(){
    int i,j,a,b;
    char cross1[40][20];

    for(a=0;a<40;a++){
        for(b=0;b<20;b++){
            cross1[a][b]='0';
        }
    }
    for(i=0;i<40;i++){
        for(j=0;j<20;j++){
            printf("%c ",cross1[i][j]);
        }
        printf("\n");
    }
    for(i=0;i<20;i++){
        for(j=0;j<20;j++){
            printf("%c ",cross[i][j]);
        }
        printf("\n");
    }
    for(i=0,a=0;i<20;i++){
        for(j=0;j<20;j++){
            if(cross[i][j]=='*'){}
            else{
                cross1[i][j]=cross[i][j];
            }
        }
    }
    printf("Cross1:\n");
    for(i=0;i<40;i++){
        for(j=0;j<20;j++){
            printf("%c ",cross1[i][j]);
        }
        printf("\n");
    }
    return 0;
}
4

1 に答える 1

1

たった1行から単語を選ぶことを想像してみてください! あなたはそれをすることができますか?はいの場合は、コードを記述してループでラップします。

for (line = 0; line < 20; ++line)
{
    // cross[line] is just one line
}

1行から単語を選ぶ方法がわからない場合は、ここにアイデアがあります. -1 に初期化された一時変数「単語が始まる場所」を用意します。アレイをスキャンします。手紙を見つけたら、その場所を思い出してください。文字ではない単語を見つけた場合は、その単語を印刷して忘れてください。水平方向の単語は、水平方向に 1 文字以上ある必要があります。これにより、水平方向の単語と垂直方向の単語を区別できます。

このようなもの:

start_index = -1;
for (i = 0; i < 20; ++i)
{
    if (line[i] == '*')
    {
        if (start_index != -1 && i - start_index > 1)
            printf(...);
    }
    else
    {
        if (start_index == -1)
            start_index = i;
    }
}

このコードを使用する場合は、右マージンで終了する単語を考慮してコードを変更する必要があります。

于 2014-12-01T22:00:54.630 に答える