如何对字符串数组中的字符串数进行求和,其中未明确定义需要多少元素?
string str[] = { "astring", "bstring", "cstring", "dstring", "zstring" };
需要找出阵列有多少元素?
答案 0 :(得分:10)
template< typename T, size_t N >
/*constexpr*/ size_t size( T(&arr)[N]) )
{
return N;
}
constexpr
如果可用(C ++ 11)将允许您将静态(编译时)用法的返回值用作另一个数组的大小。
答案 1 :(得分:8)
如果str[]
是静态定义的(如图所示),那么这将起作用:
const size_t numElements = sizeof(str) / sizeof(str[0]);
如果它是动态创建的,那么您将需要一个标记来表示最后一个元素(如果它是一个指针数组,则通常使用0
)。无论是那个还是来电者都告诉你有多少元素(也很常见)。
答案 2 :(得分:3)
除了其他答案中已列出的方法之外,另一种方法可能是在数组末尾添加一个保护值,例如空字符串。然后,您可以遍历数组,直到达到保护值。
就个人而言,我可能会使用C ++ 11和
std::vector<std::string> la = { "foo", "bar", "baz" };
所以你无论如何都可以在运行时查询la.size()
以获得你想要的东西。不幸的是,我没有看到使用std::array
这个技巧的方法,所以它不是一个完美的选择。
答案 3 :(得分:0)
我通常使用单独的变量来跟踪数组大小。
String str[] = { "astring", "bstring", "cstring", "dstring", "zstring" };
int strNum = 5;
然后,如果我需要引用任何字符串,我可以这样称呼它:
String foo = str[strNum-1];
每当我在循环中更新数组时,我只需使用strNum作为开始编写新字符串的索引,然后在每个新字符串后立即将strNum ++放在循环中。
答案 4 :(得分:0)
使用指针计算数组元素的一种方法:
#include <iostream>
using namespace std;
int main() {
string str[] = { "astring", "bstring", "cstring", "dstring", "zstring" };
cout << ((&str)[1] - str); // 5
cout << endl;
return 0;
}
输出:
5