当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《如何在C++中声明一个字符串数组?》经验,为你挑选了6个好方法。

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

可能的非解决方案:

vector v;
v.push_back("abc");
b.push_back("xyz");

for(int i = 0; i < v.size(); i++)
    cout << v[i] << endl;

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

可能的非解决方案2:

string list[] = {"abc", "xyz"};

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

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



1> Anthony Cram..:

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

std::vector v = {"Hello", "World"};

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


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

2> Tyler..:

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

char* strarray[] = {"hey", "sup", "dogg"};
vector strvector(strarray, strarray + 3);

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

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



3> Craig H..:

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


这只是直接**丑陋*.

4> Will Dean..:

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

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

#define arraysize(ar)  (sizeof(ar) / sizeof(ar[0]))



5> 小智..:

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

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

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

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



6> Eclipse..:

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

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

推荐阅读
贾志军
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有