理解 C++ 中的 <string> 字符串数组
Posted
技术标签:
【中文标题】理解 C++ 中的 <string> 字符串数组【英文标题】:Understanding <string> String Arrays in C++ 【发布时间】:2019-11-24 04:32:55 【问题描述】:使用字符串库,我试图让用户输入多行符号,稍后我将对其进行翻转。对我来说,最明显的方法似乎是使用字符串数组,但是,尽管我相信我的输入系统是正确的,但我的输出始终是一大串随机符号,最终导致“中止”。我想做的事是不可能的吗?如果是,为什么,如果不是,我将如何解决这个错误?
#include <iostream>
#include <string>
using namespace std;
/* Function Declarations */
string flipHouse();
int main()
string flipped = flipHouse();
cout<<flipped;
return 0;
string flipHouse()
int n;
cout<<"Enter the number of lines: ";
cin>>n;
string house[n];
cout<<"Enter the house image:"<<endl;
for (int i = 0; i < n+1; i++)
getline(cin,house,'\n');
for (int i = 0; i < n+1; i++)
cout<<house[i];
return house[n];
【问题讨论】:
这是为你编译的? 翻转是什么意思? @DavidO 是的,确实如此。 @0x499602D2 例如,如果用户输入 ///[,输出将是“]\\\”。 【参考方案1】:string house[n];
此数组包含n
字符串。有效索引为 0 ... n-1。越界访问数组的行为是未定义的。
for (int i = 0; i < n+1; i++) cout<<house[i];
在最后几次迭代中,您最多可以访问 n 个索引。该索引位于数组末尾之后。
return house[n];
这里返回索引 n 中的字符串。这再次超过了最后一个索引。程序的行为未定义。
另一个问题是n
不是编译时常量值。因此,它可能不能用作 C++ 中数组的大小。
【讨论】:
非常感谢!这是否意味着我无法将变量作为数组中的字符串数? @DylanDalal 不一定。您可以将 const 变量与编译时常量初始化器一起使用。 谢谢你们!我一定会研究这两个建议。string house[n]
和 n
变量实际上不是有效的 C++。可变长度数组是一些编译器支持的非标准扩展。如果你想要一个包含一组n
字符串的容器,请使用vector<string> house(n)
或(更完整)std::vector<std::string> house(n)
。以上是关于理解 C++ 中的 <string> 字符串数组的主要内容,如果未能解决你的问题,请参考以下文章
这是 C++ 中的有效数据结构 Map<string, string, string> 吗?
C++ ifstreamofstream ifstream 读取并输出文件中的string