C获取字符数组的大小

问题描述 投票:-3回答:3

我想获得Text数组中的元素数,答案应该是2

char Text[5][10] = {
    "Big12345",
    "Big54321",
};

我想要一个代码来计算字符数组中元素的数量

c multidimensional-array c-strings is-empty
3个回答
1
投票

您误会了。数组中的元素数为5。两个元素具有非空字符串,三个元素具有空字符串。但是实际上,可以在数组的任何位置放置一个空字符串。例如

char Text[5][10] = 
{
    "Big12345",
    "",
    "Big54321",
};

此声明等效于

char Text[5][10] = 
{
    "Big12345",
    "",
    "Big54321",
    "",
    ""
};

您可以编写一个函数来确定多少个元素包含非空字符串。例如

#include <stdio.h>

size_t count_non_empty( size_t m, size_t n, char s[][n] )
{
    size_t count = 0;

    for ( size_t i = 0; i < m; i++ )
    {
        count += s[i][0] != '\0';
    }

    return count;
}

int main(void) 
{
    char Text[5][10] = 
    {
        "Big12345",
        "",
        "Big54321",
    };

    printf( "There are %zu non-empty elements\n", count_non_empty( 5, 10, Text ) );

    return 0;
}

程序输出为

There are 2 non-empty elements

0
投票

在这种情况下,初始化程序之后的任何内容都将是0,因此:

size_t counter = 0;

while ( Text[counter][0] != 0 )
  counter++;

但是,总的来说,C并不能为您提供一种很好的方法。您要么必须跟踪单独使用的元素数,要么必须在数组中使用哨兵值。


0
投票

使用以下内容查找数组中分配了字符串的元素数:

#include <stdio.h>
#include <string.h>

int main()
  {
  char Text[5][10] = {"Big12345",
                      "Big54321",};
  int i, n;

  for(i = 0, n = 0 ; i < 5 ; i++)
    if(strlen(Text[i]) > 0)
      n += 1;

  printf("%d elements have a length > 0\n", n);

  return 0;
  }
© www.soinside.com 2019 - 2024. All rights reserved.