我有一个字符串数组。
std :: string str [10] = {“one”,“two”}
如何查找str[]
数组中有多少个字符串?有标准功能吗?
答案 0 :(得分:6)
尽管您只初始化了其中两个字符串,但仍有十个字符串:
#include <iostream>
int main (void) {
std::string str[10] = {"one","two"};
std::cout << sizeof(str)/sizeof(*str) << std::endl;
std::cout << str[0] << std::endl;
std::cout << str[1] << std::endl;
std::cout << str[2] << std::endl;
std::cout << "===" << std::endl;
return 0;
}
输出结果为:
10
one
two
===
如果要计算非空字符串:
#include <iostream>
int main (void) {
std::string str[10] = {"one","two"};
size_t count = 0;
for (size_t i = 0; i < sizeof(str)/sizeof(*str); i++)
if (str[i] != "")
count++;
std::cout << count << std::endl;
return 0;
}
按预期输出2
。
答案 1 :(得分:6)
如果你想计算所有元素sizeof
技术将会像其他人指出的那样工作。
如果要计算所有非空字符串,这是使用标准count_if
函数的一种可能方式。
bool IsNotEmpty( const std::string& str )
{
return !str.empty();
}
int main ()
{
std::string str[10] = {"one","two"};
int result = std::count_if(str, &str[10], IsNotEmpty);
cout << result << endl; // it will print "2"
return 0;
}
答案 2 :(得分:1)
我不知道我会使用std :: strings数组。如果您已经在使用STL,为什么不考虑矢量或列表?至少就是这样你可以用std :: vector :: size()来解决它,而不是使用丑陋的sizeof魔法。此外,如果数组存储在堆而不是堆栈上,那魔法大小将无效。
这样做:
std::vector<std::string> strings(10);
strings[0] = "one";
strings[1] = "two";
std::cout << "Length = " << strings.size() << std::endl;
答案 3 :(得分:0)
您总是可以使用countof
宏来获取元素的数量,但同样,内存被分配给10个元素,这就是您将获得的计数。
答案 4 :(得分:0)
理想的方法是
std::string str[] = {"one","two"}
int num_of_elements = sizeof( str ) / sizeof( str[ 0 ] );
答案 5 :(得分:0)
因为你知道大小。 你可以做二进制搜索not null / empty。
str [9]是空的
str [5]是空的
str [3]不是空的
str [4]是空的
你有4个项目。
我真的不想实现代码,但这会非常快。
答案 6 :(得分:0)
只需将此函数用于1D字符串数组:
template<typename String, uint SIZE> // String can be 'string' or 'const string'
unsigned int NoOfStrings (String (&arr)[SIZE])
{
unsigned int count = 0;
while(count < SIZE && arr[count] != "")
count ++;
return count;
}
用法:
std::string s1 = {"abc", "def" };
int i = NoOfStrings(s1); // i = 2
我只是想知道我们是否可以为此编写模板元程序! (因为在编译时一切都已知)