字符串[]的长度(字符串中的元素数)
Length of string[] (number of elements in a string)
我想定制我的字符串,一切正常,但当显示字符串时,它会立即显示"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"中有多少元素?
两件事:
-
C++是0索引的。这意味着
std::string str[32]
具有从0到31的索引,并且不应该访问str[32]
。这将导致崩溃。 -
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
。
- 将指针作为缓冲区传递到第一个字符串元素
- C++字符串问题-如何访问字符串元素
- 反转由空格分隔的字符串元素将返回比原始字符串更大的字符串
- 将向量元素与字符串元素进行比较,而不初始化向量
- 如何获取数组中字符串元素的字符数?[C++]
- 如何删除在没有STL的队列中存储在数组中的第一个字符串元素
- 比较两个向量的<Structs>字符串元素
- 将字符串元素转换为整数 (C++11)
- 如何使操作员返回引用字符串元素
- 访问字符串元素地址
- 第一个字符串元素的地址产生意外结果
- 在C 中的字符串向量的字符串元素中循环遍历所有字符
- 将字符串元素分配给结构数组中的结构
- C++检查字符串元素的相等性
- 将字符串元素转换为整数C++
- 试图将字符串元素与循环和索引进行比较,但索引不会增加
- C++ - 链表插入排序(字符串元素)
- C++将二维C字符串元素传递到函数中
- 从字符串元素中获取字符串
- 比较列表<string>和向量<string>中的字符串元素