计算字符串数组c ++中的字符串?

时间:2012-10-24 12:02:21

标签: c++ string count

如何对字符串数组中的字符串数进行求和,其中未明确定义需要多少元素?

string str[] = { "astring", "bstring", "cstring", "dstring", "zstring" };

需要找出阵列有多少元素?

5 个答案:

答案 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