如何在C++中声明一个字符串数组?

nau*_*cho 86 c++ arrays

我试图以最好的方式迭代静态字符串数组的所有元素.我希望能够在一行上声明它并轻松添加/删除元素,而无需跟踪数字.听起来很简单,不是吗?

可能的非解决方案:

vector<string> v;
v.push_back("abc");
b.push_back("xyz");

for(int i = 0; i < v.size(); i++)
    cout << v[i] << endl;
Run Code Online (Sandbox Code Playgroud)

问题 - 无法使用字符串列表在一行上创建向量

可能的非解决方案2:

string list[] = {"abc", "xyz"};
Run Code Online (Sandbox Code Playgroud)

问题 - 无法自动获取字符串数量(我知道).

必须有一个简单的方法来做到这一点.

Ant*_*amp 107

C++ 11添加了初始化列表以允许以下语法:

std::vector<std::string> v = {"Hello", "World"};
Run Code Online (Sandbox Code Playgroud)

至少在GCC 4.4中添加了对此C++ 11功能的支持,并且仅在Visual Studio 2013中添加.

  • 我知道它已经岁了 - 但我真的认为这是现在最好的答案. (3认同)
  • 我同意,而且它已经岁了. (3认同)

Tyl*_*ler 36

您可以vector<string>从静态创建的char*数组中简要地初始化a :

char* strarray[] = {"hey", "sup", "dogg"};
vector<string> strvector(strarray, strarray + 3);
Run Code Online (Sandbox Code Playgroud)

顺便说一句,这会复制所有字符串,因此您使用两倍的内存.您可以使用Will Dean的建议在这里用arraysize(str_array)替换幻数3 - 虽然我记得有一些特殊情况,其中特定版本的arraysize可能会做坏事(抱歉我不能立即记住细节) .但它经常正常工作.

另外,如果你真的对这一行很感兴趣,你可以定义一个可变参数宏,这样就可以使用一行代码DEFINE_STR_VEC(strvector, "hi", "there", "everyone");.


Cra*_*g H 26

升压分配库似乎是你在寻找什么.它使得容器的常量比以往更容易.

  • 这只是直接**丑陋*. (30认同)

Wil*_*ean 23

问题 - 无法自动获取字符串数量(我知道).

有一种沼泽标准的方法,很多人(包括MS)定义宏,如arraysize:

#define arraysize(ar)  (sizeof(ar) / sizeof(ar[0]))
Run Code Online (Sandbox Code Playgroud)


小智 9

用C++声明一个字符串数组,如下所示: char array_of_strings[][]

例如 : char array_of_strings[200][8192];

将包含200个字符串,每个字符串的大小为8kb或8192字节.

用于strcpy(line[i],tempBuffer); 将数据放入字符串数组中.


Ecl*_*pse 7

一种可能性是使用NULL指针作为标志值:

const char *list[] = {"dog", "cat", NULL};
for (char **iList = list; *iList != NULL; ++iList)
{
    cout << *iList;
}
Run Code Online (Sandbox Code Playgroud)