我输入矩阵迷宫[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");
}
答案 0 :(得分:2)
如果您使用的是strcpy
函数,则源字符串必须以'\ 0'结尾,
在您的代码迷宫[3] [3]中似乎不是一个字符串数组,因为没有为'\ 0'保留空间。
在这种情况下,你使用strcpy
函数代替使用memcpy
,你可以提供要复制的内存大小。
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);
}
答案 1 :(得分: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
}
答案 2 :(得分: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
因为你的数组看起来是char数组而不是字符串,你不能使用“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