C++ 修改字符串数组中的字符串

C++ 修改字符串数组中的字符串,c++,string,C++,String,我有一个字符串数组,我想随意修改它的元素。代码如下: char pieces[9][4] = { " ", " o ", " a ", " ", " ", " ", " b ", " ", " " }; pieces[2] = { " x " }; 正如我所知,片段[]中的元素是字符串文字,因此它们不能更改(我不知道为什么会这样)。也许可以使用std::string或vectors来解决这个问题。但是,我想知道这种操作,或者非常类似的操作,是否可以使用字符串数组来完成。

我有一个字符串数组,我想随意修改它的元素。代码如下:

char pieces[9][4] = { "   ", " o ", " a ", "   ", "   ", "   ", " b ", "   ", "   " };
pieces[2] = { " x " };
正如我所知,片段[]中的元素是字符串文字,因此它们不能更改(我不知道为什么会这样)。也许可以使用std::string或vectors来解决这个问题。但是,我想知道这种操作,或者非常类似的操作,是否可以使用字符串数组来完成。仅使用字符串数组就可以完成类似的操作吗?

可以

pieces[2][0] = ' ';
pieces[2][1] = 'x';
pieces[2][2] = ' ';
pieces[2][3] = '\0';
做你想做的吗?

你可以使用
strcpy()

请参见下面的示例代码。见工作代码:

输出:

At point 1:  a 
At point 2:  x 

在您的特定情况下,看起来您总是有一些字符被空格包围,因此您可以简单地执行
片段[2][1]='x'
以修改该元素。然而

您可以正确地假设,使用
std::string
std::vector
可以简化此操作,但由于我们已经知道大小,因此
std::array
可能会更好:

std::array<std::string, 9> pieces = { "   ", " o ", " a ", "   ", "   ", "   ", " b ", "   ", "   " };
pieces[2] = " x ";
std::数组片段={”、“o”、“a”、“a”、“b”、“b”、“a”、“a”、“a”、“a”、“b”、“b”、“a”、“a”、“a”、“a”、“a”、“a”、“a”、“a”、“a”、“a”、“a”、“a”、“b”、“b”、“a”、“b”、“a”、“a”、“a”、“a”、“a”、“a”、“a”、“a”、“b”、“;
作品[2]=“x”;

您可能会注意到,下标操作符仍然在
std::array
上工作。这意味着,即使您切换到
std::array
,您也可能不需要在其他代码中做太多更改(只需处理
std::strings
)的c字符串部分)

首先,使用像
片段[2]={“x}这样的大括号
是初始化的方式,所以不能这样做

其次,
pieces[2]
是一个字符数组,因此它不是可修改的l值


您可以逐个元素或使用
strcpy()
函数更改其内容元素。

为了总结不同用户提供的不同解决方案,选项如下:

  • 一次修改一个char元素。示例:件[2][1]=“x”

  • 使用strcpy()。示例:strcpy(件[2],“x”)

  • 另一种类型:std::arraystd::stringstd::vector


字符串文本不能更改,但是从字符串文本初始化的a
char[]
当然可以更改。元素不是字符串文本。如果它被声明为
char*pieces[9]={…}。但是,既然您声明了
char-pieces[9][4]
pieces
的元素是数组,而不是指向文本的指针。为了澄清:在这个简单的例子中,
std::array-pieces
std::string-pieces[9]
@HolyBlackCat之间实际上没有什么区别,我打算添加一部分来论证
.at()
over subscript用于边界检查,但将其关闭以缩短答案。我认为这是我个人喜欢使用STL类而不是原始数组的最大原因。大括号可以用于正确的类型。看,你似乎是对的,即使我到现在还没有遇到合适的类型。但问题是
char-arr[3];arr={'a','b','c'}不工作正在工作。如果您尝试
arr[4]
?不,它也不工作。但是为什么你认为它会奏效@RobertAndrzejuk?
std::array<std::string, 9> pieces = { "   ", " o ", " a ", "   ", "   ", "   ", " b ", "   ", "   " };
pieces[2] = " x ";