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