将String添加到未知大小的数组c ++

时间:2012-02-28 14:36:33

标签: c++ arrays string

我在使用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[];

2 个答案:

答案 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> >