如何在 c++ 中将 2D 数组转换为单个字符串

How to convert a 2D array into a single string in c++

本文关键字:转换 单个 字符串 数组 2D c++ 中将      更新时间:2023-10-16

我正在编写一个路径查找器,并有一个 21x21 数组,我想将其转换为单个字符串。数组将仅包含 1 和 0。将 1 放在一起以形成路径。

我当前的相关代码片段是

std::string str;
for(int i = 0; i < 21; i++)
{
for(int j = 0; j < 21; j++)
{
str += grid[i][j];
}
}
std::cout << str;
return (str);

当我运行代码时,它会跳转到包含以下内容的文件static inline size_t length(const char_type* __s) {return strlen(__s);}EXC_BAD_ACCESS.

只需在循环中使用此代码

str +=std::to_string(grid[i][j]);

您似乎正在尝试访问不可用的索引 20,因为您从 0 开始循环。

您可以将迭代限制从 0 更改为 20。

您的数组是 20x20,因此从索引 0 到 19。 您的 for 循环正在检查从索引 0 到 20。 索引 [20] 不存在。 将 for 循环中的 "i < 21" 更改为 :i < 20。J 也一样。

grid[i][0]充当仅分配了 20 个字节空间的字符指针,因此+=操作可以防止您抓取超出最后一个字节的垃圾数据。

你在网格中迭代得太远了。 您的循环应该是:

std::string str;
// iterate through i index from 0 to 19. 
for(int i = 0 ; i < 20; i++)
{
// iterate through j index from 0 to 19.
for(int j = 0 ; j < 20 ; j++)
{
// After testing it you do need to replace str += a[i][j]; for it to do what you want. 
str.append(std::to_string(grid[i][j])); 
}
}
std::cout << str;
return(str);

在您更正网格如何初始化后,我写了一个测试,看看我是否可以解决您无法解决的问题。但是,如果没有 append(to_string( 更改,它不会生成您期望的字符串。它将 int 解释为 char,并放置一个 ASCII 数值为 0 或 1 的字符。而不是使用"0"或"1"字符,其数字 ASCII 代码值为 48 和 49。

这是我完整的测试程序:在 Ubuntu VM 上使用"g++ -std=c++11"编译。

#include<iostream>
int main()
{
int a[21][21] = {}; 
a[1][1]=1;
a[2][1]=1;
std::string str;
for (int i = 0 ; i < 21; ++i)
{   
for (int j = 0; j < 21; ++j)
{   
str.append(std::to_string(a[i][j]));
}   
}   
std::cout << str << std::endl;
}

输出:

000000000000000000000010000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000