Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/137.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
理解C+中的多维字符串数组+; 我是C++新手。我不明白为什么下面的代码会打印“r”字符串。我认为它应该是一个2X3X4元素的数组,因此通过指向arr[0][0][0]我希望第一个arr=a的第一个字符串中的第一个字符,但这会打印abcd。有人能解释一下吗 #include <iostream> using namespace std; int main() { string arr [2] [3] [4]={ {"abcd","efgh","ijkl"}, {"mnop","qrst","xywz"} }; cout<<arr [1] [0] [1] [1]<<endl; return 0; }_C++_Arrays_Multidimensional Array - Fatal编程技术网

理解C+中的多维字符串数组+; 我是C++新手。我不明白为什么下面的代码会打印“r”字符串。我认为它应该是一个2X3X4元素的数组,因此通过指向arr[0][0][0]我希望第一个arr=a的第一个字符串中的第一个字符,但这会打印abcd。有人能解释一下吗 #include <iostream> using namespace std; int main() { string arr [2] [3] [4]={ {"abcd","efgh","ijkl"}, {"mnop","qrst","xywz"} }; cout<<arr [1] [0] [1] [1]<<endl; return 0; }

理解C+中的多维字符串数组+; 我是C++新手。我不明白为什么下面的代码会打印“r”字符串。我认为它应该是一个2X3X4元素的数组,因此通过指向arr[0][0][0]我希望第一个arr=a的第一个字符串中的第一个字符,但这会打印abcd。有人能解释一下吗 #include <iostream> using namespace std; int main() { string arr [2] [3] [4]={ {"abcd","efgh","ijkl"}, {"mnop","qrst","xywz"} }; cout<<arr [1] [0] [1] [1]<<endl; return 0; },c++,arrays,multidimensional-array,C++,Arrays,Multidimensional Array,它指向第一个列表中第一个字符串的第一个字母 我想C++中的等价物是: #include <iostream> using namespace std; int main() { string arr [2] [3] [4]={ {"abcd","efgh","ijkl"}, {"mnop","qrst","xywz"} }; cout<<arr[0][0][0]<<endl; return 0; } #包括 使用名称空

它指向第一个列表中第一个字符串的第一个字母

<>我想C++中的等价物是:

#include <iostream>

using namespace std;

int main()
{
  string arr [2] [3] [4]={
    {"abcd","efgh","ijkl"},
    {"mnop","qrst","xywz"}
  };

  cout<<arr[0][0][0]<<endl;

  return 0;
}
#包括
使用名称空间std;
int main()
{
字符串arr[2][3][4]={
{“abcd”、“efgh”、“ijkl”},
{“mnop”、“qrst”、“xywz”}
};

cout您的初始值设定项按如下方式填充数组:

arr[0][0][0] = "abcd";
arr[0][0][1] = "efgh";
arr[0][0][2] = "ijkl";
arr[1][0][0] = "mnop";
arr[1][0][1] = "qrst";
arr[1][0][2] = "xywz";
所有其他元素默认初始化为空字符串


因此,
arr[1][0][1]
是包含
“qrst”
的字符串,
arr[1][0][1][1]
是该字符串的第二个字符,即
'r'
您初始化的数组可能不是您想要初始化的数组

一维字符串数组

string arr [2]= {"abcd","efgh"};
string arr [2][2]= {{"abcd","efgh"}, {"ijkl","mnop"}};
string arr [2][2][2]= {
    {
        {"abcd","qwer"},
        {"efgh","tyui"}
    }, 
    {
        {"ijkl","zxcv"},
        {"mnop","bnmo"}
    }
};
二维字符串数组

string arr [2]= {"abcd","efgh"};
string arr [2][2]= {{"abcd","efgh"}, {"ijkl","mnop"}};
string arr [2][2][2]= {
    {
        {"abcd","qwer"},
        {"efgh","tyui"}
    }, 
    {
        {"ijkl","zxcv"},
        {"mnop","bnmo"}
    }
};
三维字符串数组

string arr [2]= {"abcd","efgh"};
string arr [2][2]= {{"abcd","efgh"}, {"ijkl","mnop"}};
string arr [2][2][2]= {
    {
        {"abcd","qwer"},
        {"efgh","tyui"}
    }, 
    {
        {"ijkl","zxcv"},
        {"mnop","bnmo"}
    }
};

因此,
cout您将标准库
string
对象与c-string/string文本的概念混淆了,您通过避免使用
std::
前缀来帮助自己解决这个问题。如果我们加上这个,它开始变得更有意义:

std::string arr [2] [3] [4]={
  {"abcd","efgh","ijkl"},
  {"mnop","qrst","xywz"}
};
这里声明的是一个包含2 x 3 x 4个std::string实例的数组。但您编写的内容看起来像是在声明字符数组:

char arr [2] [3] [4] = {
  {"abcd","efgh","ijkl"},
  {"mnop","qrst","xywz"}
};
几乎可以达到您想要达到的效果——在本例中,
arr[0][0][0]
确实指向
a
而不是字符串

不幸的是,这里的问题是您指定了最终维度4,然后向初始值设定项提供了5个字符的c字符串。请记住:

"abcd"
相当于

{ 'a', 'b', 'c', 'd', 0 }
因为c字符串是以nul结尾的。所以您需要编写

char arr [2] [3] [5] = {
  {"abcd","efgh","ijkl"},
  {"mnop","qrst","xywz"}
};
或者,如果您真正想要的是字符数组,而不是以nul结尾的c字符串:

charr arr[2][3][4] = {
    { { 'a', 'b', 'c', 'd' }, { 'e', 'f', 'g', 'h' }, ...
std::string
是一个离散对象,而不是c字符串的别名

#include <iostream>
#include <string>

int main() {
    std::string arr[2][3] = {
        { "abcd", "efgh", "ijkl" },
        { "mnop", "qrst", "wxyz" },  // who needs 'u' or 'v'?
    };

    std::cout << "arr[0][0] = " << arr[0][0] << "\n";
    std::cout << "arr[0][0][0] = " << arr[0][0][0] << "\n";

}
#包括
#包括
int main(){
std::字符串arr[2][3]={
{“abcd”、“efgh”、“ijkl”},
{“mnop”、“qrst”、“wxyz”},//谁需要“u”或“v”?
};

STD::CUT< P>不能将Python与C++进行比较,因为在Python中,一个字符串和一个字符串几乎是相同的,而C++中完全不同。在Python,编写< /P>并不重要。
arr=[["abcd","efgh","ijkl"],["mnop","qrst","xwyz"]]

因为它的意思是相同的。在C++中,它把字符串当作一个“容器”,它导致你观察到的行为,它将把这些“容器”分配给第一个索引而不是单个字符。你可以做的是

char[2][12] arr = {
                    {"a","b","c","d","e","f","g","h","i","j","k","l"},
                    {"m", "n","o","p","q","r","s","t","x","w","y","z"}
                   };

std::string
保存一个字符串,不管它有多长。你不需要告诉编译器。你的数组只有二维。@JonathanPotter这可能是个愚蠢的问题,但为什么数组只有二维?@MarcusMüller
使用namspace std;
后跟
字符串arr…。
绝对是
>std::string
@code0例如,
arr[0][0]
是一个
std::string
对象,其中包含字符串“abcd”。@JonathanPotter我是否正确理解,在这个特定实例中,它是一个二维数组?“您创建的数组不是三维的”也是。不管你怎么想?@IgorTandetnik你能解释一下吗?(我想我对此也不太了解)。@code0这个数组是非常三维的。基本上[x][y][z]是x元素数组的y数组的z数组。@code0没有太多的解释,真的。
arr
是这样声明的:
string arr[2][3][4]
。变量名后面有三个维度,因此它是一个三维数组。老实说,我无法理解混淆的本质。@IgorTandetnik再看一次,我发现我有点困惑。在这个问题中,声明了一个三维数组,但只有前两个是赋值的。我我想这就是让我困惑的地方。我已经有一段时间没有处理多维数组了。我想如果你解释他只需要二维字符串对象数组会有所帮助。@kfsone需要什么?练习的目的从来没有充分解释过。你怎么知道OP需要什么?编辑:啊,我明白了。q的下半部分在我发布我的答案时,uestion不存在。我认为他的代码概括了他试图做得很好的事情。他的第三维度是试图指定每个字符串中的字符数,就像他正在创建一个字符数组一样,这是由他的初始值设定格式和字符位置预期支持的。@kfsone就像我说的那样-第二部分最初并不存在。@kfsone如果没有Python示例,没有任何迹象表明OP可能需要2d数组;我可能非常密集。事实上,根据Python示例,它们的混淆对我来说也没有多大意义(如果字符串文字长度不同,他们认为Python中会发生什么情况?)该程序没有包含,因此它甚至可能没有引用
std::string
需要包含什么
#include
?您的上一个示例在没有包含
#include
@amirteymuri可移植性的情况下运行完全相同,而不是每个包含。
“a”
?这是一个由2个字符组成的数组。
char[2][12]arr
?这是什么语言?