0

我有输入矩阵 maze[3][3] 作为

asd
usd
psd

我想把它转换成两个矩阵 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

2

如果你使用strcpy函数,你的源字符串必须以'\0'结尾,似乎在你的代码迷宫[3][3] 中并不是一个字符串数组,因为没有为'\0'保留空间。

在这种情况下,您 cat 使用strcpy函数而不是使用memcpywhere 您可以提供要复制的内存大小。

for ( i=0; i < row; i++ )
{
    mazeW[i][0] = 'W';
    memcpy ( mazeW[i]+1, maze[i], 3); 

    mazeE[i][3] = 'E';
    memcpy ( mazeE[i], maze[i], 3);
}
于 2013-10-25T18:08:10.387 回答
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' 是一个 8 位值,通常用于存储 ASCII 字符。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 回答