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::array,std::string,std::vector
字符串文本不能更改,但是从字符串文本初始化的achar[]
当然可以更改。元素不是字符串文本。如果它被声明为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[]={'a','b','c'}时,代码>不工作代码>正在工作。如果您尝试arr[4]
?不,它也不工作。但是为什么你认为它会奏效@RobertAndrzejuk?
std::array<std::string, 9> pieces = { " ", " o ", " a ", " ", " ", " ", " b ", " ", " " };
pieces[2] = " x ";