字符串[]的长度(字符串中的元素数)

Length of string[] (number of elements in a string)

本文关键字:字符串 元素      更新时间:2023-10-16

我想定制我的字符串,一切正常,但当显示字符串时,它会立即显示"example_4578.exe已停止运行"错误。我注意到问题出现在I<str[32].length部分,因为当我将其更改为I<3,它工作没有任何问题。我应该如何解决这个问题?

std::string str[32];
cin >> str[1];
cout << "str[1]=" << str[1] << endl;
cin >> str[2];
cout << "str[2]=" << str[2] << endl;
for (int i = 0; i < str[32].length; i++)
{
    cout << str[i];
}

编辑1。我犯了一个巨大的错误。实际上,我想在"str"中找到元素/单词的"数量"。在我的例子中,我只设计了两个cin。但我实际上想稍后设计一个"for"循环,这样用户就可以输入他想要的任意多个单词,所以如果他输入了4个单词,我希望代码将这些单词数返回给我。我应该如何做到这一点?换句话说,我如何才能知道"str"中有多少元素?

两件事:

  1. C++是0索引的。这意味着std::string str[32]具有从0到31的索引,并且不应该访问str[32]。这将导致崩溃。

  2. str[31].length()(可能是您想要的)是最后一个字符串的长度,而不是数组的长度。数组的长度是32,您的循环应该读取for(int i = 0; i < 32; i++)

主要问题是您访问的元素(数字32)超出了界限(0-31)。为了解决这个问题并在未来不再重复,请使用范围-for循环:

std::string str[32];
for (auto s : str)
    std::cout << s;

str[32].length不是你想的那样。

我猜你的意思是:一个32元素数组的长度。正确的

您所写的是指向数组第33个元素的函数length指针。

这是因为类型有:

std::string str[32]; // `str` is 32-element array of `std::strings`
str[32]; // `std::string` taken from 33rd position in array `str` (arrays' indexing starts at 0)

std::string具有一个名为size_t std::string::length()的成员函数。当按名称引用时,您会得到它的地址。

为了实现你想要的,你需要写:

for (int i = 0; i < 32; i++) {
    cout << str[i];
}

不幸的是,普通数组没有内置length(或任何类似的东西)。因此,您要么需要使用常量,要么(最好)使用容器,如std::vector