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

时间:2015-02-17 15:37:36

标签: c++ string

我想cout我的字符串,一切正常,但是当显示字符串时,它会立即显示“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”中找到元素/单词的“数字”。在我的例子中,我只设计了两个cins。但我实际上想在以后设计一个“for”循环,这样用户可以输入他想要的多个单词,所以如果他输入4个单词,我希望该代码将这些单词返回给我。我该怎么做?换句话说,我怎样才能找出“ str ”中有多少元素?

3 个答案:

答案 0 :(得分:6)

一些事情:

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

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

答案 1 :(得分:1)

主要问题是您正在访问超出边界的元素(数字32)(0 - 31)。要解决此问题并且以后不再重复使用范围 - for循环:

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

答案 2 :(得分:0)

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(或类似的东西)。因此,您需要使用常量,或者(更好)使用容器,例如{{1} }。