我在使用C ++中的数组时遇到了一些问题。
请参阅我想让用户以String
的形式向程序提供输入,并继续执行直到用户满意为止。我的输入工作正常,但是当我想将字符串存储到一个运行于某些问题的数组中时。我必须明确地为我的阵列定义一个大小?有没有办法将输入存储在2或3个不同的arrays
(取决于输入,我用一些if语句排序)的字符串,并打印出来?
我的代码现在看起来像这样..
string firstarray[10];
string secarray[10];
//The cin stuff here and reading strings from user-input
if(MyCondition1){
for(int x = 0; x<=9;x++){
firstarray[x] = name;
}
if(MyCondition2){
for(int x = 0; x<=9;x++){
secarray[x] = name;
}
有没有办法跳过数组的10限制?它可能像字符串
firstarray[];
答案 0 :(得分:8)
您正在寻找std::list。或者更好的是,std::vector可让您按位置访问元素。
它们都可以动态扩展。
using namespace std;
// looks like this:
vector<string> firstvector;
firstvector.push_back(somestring); // appends somestring to the end of the vector
cout << firstvector[someindex]; // gets the string at position someindex
cout << firstvector.back(); // gets the last element
关于你的第二个问题:
你当然可以创建几个数组/向量来放入你的字符串。甚至可以使用类型为map<key, vector<string>>
的{{3}},其中key
可以是类别的枚举(或字符串,{ {3}})。
您将一个新值放入其中一个向量中:
tCategoryEnum category = eCategoryNone;
switch(condition)
{
case MyCondition1:
category = eCategory1;
break;
case MyCondition2:
category = eCategory2;
break;
// ...
}
// check if a category was found:
if(category != eCategoryNone)
{
categoryMap[category].push_back(name);
}
然后输出它,你可以简单地遍历每个类别和向量元素
for(int i = 0; i < categoryMap.size(); i++)
for(int j = 0; j < categoryMap[i].size(); j++)
cout << categoryMap[i][j];
答案 1 :(得分:5)
您是否考虑过使用std::vector<string> >
?