C++中数组和字符串的索引

Posted

技术标签:

【中文标题】C++中数组和字符串的索引【英文标题】:Index of arrays and strings in c++ 【发布时间】:2010-05-07 09:30:54 【问题描述】:

我想知道字符串和数组的索引从哪里开始。 我在制作程序时遇到了很多困惑。

在计算字符串的字符串长度时,空字符是否也算在内?

【问题讨论】:

只是说:在问题的末尾使用问号可能会增加可读性;特别是对于非英语为母语的人。 实际上,该问题包含可能不是预期的限制。如果你索引一个数组,那么实际上索引从 0 开始。但是如果你索引一个指针,你实际上可以做array[-1],只要指针指向合适的内存。 @Schaub,让我们保持简单,好吗?尽管使用数组来引用不在数组中的内容可能是“合法的”,但这并不意味着这是明智或明智的做法。唯一真正合理的解释是如何访问数组的内容;而不是如何使用它访问任意内存。 @Michael,我不确定你想说什么“使用数组来引用不在数组中的内容”。没说过这样的话。我也没有说如何访问“任意内存”。我只是说你可以使用小于 0 的数字来索引,如果你有一个从数组开头偏移的指针,比如int a[2] = 0, 1 ; int b = (&a[1])[-1]; Schaubs 评论实际上包含了一个见解,为什么在编程时索引从零开始。这是因为索引在寻址到数组时用作偏移量,因此零偏移量表示数组的开头。 【参考方案1】:

在 C、C++、Java 和 Python 中,数组索引是从 0 开始的,因此它们的范围从 0 到 length-1。一些面向数学的编程语言(例如 Matlab)是基于 1 的。作为一般经验法则,“真正的编程语言”倾向于使用从 0 开始的索引;数学/原型设计/建模语言或其他特定领域的语言可以使用基于 0 或 1 的索引,而基于 1 的索引通常用于数学。

就字符串而言,字符串的长度通常是指字符串中不包括终止NUL字符的字符数,而缓冲区的长度是指整个缓冲区的长度,包括终止的 NUL。您会发现std::string::size() 和strlen() 返回字符串中的字符数,不包括终止NUL(即字符串长度)。缓冲区的长度实际上比这多一倍。

【讨论】:

【参考方案2】:

索引从零开始。

【讨论】:

那么我也想知道在计算字符串的字符串长度时是否也计算空字符。 如果您希望以 char * 的方式遍历字符串的字符,在这种情况下,'\n' 也将在那里。 char 数组的长度等于字符串加一的长度。【参考方案3】:

不完全清楚你在问什么。

如果您要询问字符串和数组是否从索引 0 开始,那么是。

http://en.wikipedia.org/wiki/Zeroth

【讨论】:

以上是关于C++中数组和字符串的索引的主要内容,如果未能解决你的问题,请参考以下文章

数组如何在 C++ 的内存中存储字符串?

c ++:解析包含表达式“访问多维数组”的字符串

c++中字符串向量的索引[关闭]

在向量中查找字符串的索引

C++ 地图查找性能与 PHP 数组查找性能

在 C++ 中查找字符串中特殊字符的索引