我想获得Text数组中的元素数,答案应该是2
char Text[5][10] = {
"Big12345",
"Big54321",
};
我想要一个代码来计算字符数组中元素的数量
您误会了。数组中的元素数为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
,因此:
size_t counter = 0;
while ( Text[counter][0] != 0 )
counter++;
但是,总的来说,C并不能为您提供一种很好的方法。您要么必须跟踪单独使用的元素数,要么必须在数组中使用哨兵值。
使用以下内容查找数组中分配了字符串的元素数:
#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;
}