0

入力行列迷路[3] [3]を次のように持っています

asd
usd
psd

そして、それをフォームの2つのマトリックスmazeW[3][4]とmazeE[3][4]に変換したい

Wasd 
Wusd
Wpsd

asdE
usdE
psdE

どうすればいいですか??私はこれを試しましたが、助けにはなりませんでした

for(int i=0;i<row;i++)
{
strcpy("W",strcpy(mazeW[i],maze[i]));
strcpy(strcpy(mazeE[i],maze[i]),"E");
}
4

3 に答える 3

1
for(i=0;i<3;i++)
{
    mazeW[i][0] = 'W';  //sets the first element of each line to W
    memcpy(&mazeW[i][1], maze[i], sizeof(char)*3);   //copies the rest of the line from maze

    mazeE[i][3] = 'E';  // sets the last element of each line to E
    memcpy(&mazeE[i][0], maze[i], sizeof(char)*3);  ////copies the beggining of the line from maze
}
于 2013-10-25T17:57:17.453 に答える
1

ソースをもっと投稿しないと、配列と文字列を混同しているように見えます。

C および C++ では、「char」は通常 ASCII 文字を格納するために使用される 8 ビット値です。ASCII テーブルは周期表のようなもので、数値で参照できるように番号付きのリストを提供します。周期表の 1 は水素で、元素 1 です。ASCII では、値 32 は空白文字を表し、値 48 は「0」文字を表し、49 は「1」を表します。

C および C++ では、一連の文字が文字列として扱われることになっている場合、ASCII 値が 0 ('0' ではなく 0、'\0' とも書かれる) の文字で終わらなければならないという規則があります。 )。

したがって、3 文字の文字列を保存するには、4 文字またはバイトが必要です。

char foo[3] = "foo"; // illegal. "foo" is actually { 'f', 'o', 'o', 0 };
char bar[4] = "foo"; // ok

配列は文字列ではなく文字配列のように見えるため、「strcpy」などを使用することはできません。「memcpy」を使用するか、要素を手動でコピーする必要があります。

これは、解決しようとしている問題の作業バージョンです。これが役立つことを願っています。

ideone でのオンライン デモ: http://ideone.com/6TcapX

#include <stdio.h>
#include <string.h>

#define MAZE_COLUMNS 3
#define MAZE_ROWS 3
#define MAZEW_COLUMNS 4
#define MAZEE_COLUMNS 4

static void transcribeMazeRow(const char* source, size_t srcColumns, char prefix, char* dest, size_t destColumns)
{
    dest[0] = prefix;
    memcpy(&dest[1], &source[0], srcColumns * sizeof(source[0]));
}

int main(int argc, char* argv[])
{
    // 3 rows of 3 columns, each is a distinct char. this is not a string.
    char maze[MAZE_ROWS][MAZE_COLUMNS] = { { 'a', 's', 'd' }, { 'u', 's', 'd' }, { 'p', 's', 'd' } };

    // 3 rows of 4 columns, distinct character values, not a string.
    char mazeW[MAZE_ROWS][MAZEW_COLUMNS];
    char mazeE[MAZE_ROWS][MAZEE_COLUMNS];

    for (size_t row = 0; row < MAZE_ROWS; ++row) {
        transcribeMazeRow(maze[row], MAZE_COLUMNS, 'W', mazeW[row], MAZEW_COLUMNS);
        transcribeMazeRow(maze[row], MAZE_COLUMNS, 'E', mazeE[row], MAZEE_COLUMNS);
    }

    // this part is mostly to show the poster the correct way to refer to all elements of each array.
    printf("maze: %c%c%c, %c%c%c, %c%c%c\n",
            maze[0][0], maze[0][1], maze[0][2],
            maze[1][0], maze[1][1], maze[1][2],
            maze[2][0], maze[2][1], maze[2][2]      );
    printf("mazeW: %c%c%c%c, %c%c%c%c, %c%c%c%c\n",
            mazeW[0][0], mazeW[0][1], mazeW[0][2], mazeW[0][3],
            mazeW[1][0], mazeW[1][1], mazeW[1][2], mazeW[1][3],
            mazeW[2][0], mazeW[2][1], mazeW[2][2], mazeW[2][3]      );
    printf("mazeE: %c%c%c%c, %c%c%c%c, %c%c%c%c\n",
            mazeE[0][0], mazeE[0][1], mazeE[0][2], mazeE[0][3],
            mazeE[1][0], mazeE[1][1], mazeE[1][2], mazeE[1][3],
            mazeE[2][0], mazeE[2][1], mazeE[2][2], mazeE[2][3]      );

    return 0;
}

出力:

maze: asd, usd, psd
mazeW: Wasd, Wusd, Wpsd
mazeE: Easd, Eusd, Epsd
于 2013-10-25T19:44:23.553 に答える