char* names[]={"A", "B", "C"};
有没有办法找到数组中的字符串数量。 例如,在这种情况下,它必须是3.请让我知道。 谢谢。
在这种情况下,您可以将总大小除以第一个元素的大小:
num = sizeof(names) / sizeof(names[0]);
但是要小心,这适用于数组 。 它不适用于指针。
对于一个数组,即赏金中的例子,执行sizeof(names)/sizeof(names[0])
足以确定数组的长度。
示例中的字符串具有不同长度的事实并不重要。 names
是char *
的数组,因此数组的总大小(以字节为单位)是数组中元素的数量乘以每个元素的大小(即char *
)。 这些指针中的每一个都可以指向任何长度的字符串,或者指向NULL。 无所谓。
测试程序:
#include int main(void) { char* names1[]={"A", "B", "C"}; // Three elements char* names2[]={"A", "", "C"}; // Three elements char* names3[]={"", "A", "C", ""}; // Four elements char* names4[]={"John", "Paul", "George", "Ringo"}; // Four elements char* names5[]={"", "B", NULL, NULL, "E"}; // Five elements printf("len 1 = %zun",sizeof(names1)/sizeof(names1[0])); printf("len 2 = %zun",sizeof(names2)/sizeof(names2[0])); printf("len 3 = %zun",sizeof(names3)/sizeof(names3[0])); printf("len 4 = %zun",sizeof(names4)/sizeof(names4[0])); printf("len 5 = %zun",sizeof(names5)/sizeof(names5[0])); }
输出:
len 1 = 3 len 2 = 3 len 3 = 4 len 4 = 4 len 5 = 5
编辑:
为了澄清,这只适用于你已经定义了一个数组,即char *names[]
或char names[][]
,并且你在定义数组的范围内。 如果它被定义为char **names
那么你有一个指针作为一个数组,上面的技术将不起作用。 类似地,如果char *names[]
是函数参数,则在这种情况下,数组衰减到第一个元素的地址。
这取决于您的arrays的创建方式。 在C中,没有办法检查作为指针的数组的长度,除非它有一个sentinel元素,或者一个整数与数组一起传递作为数组中元素的计数。 在您的情况下,您可以使用此:
int namesLen = sizeof(names) / sizeof(char);
但是,如果您的数组是指针,
char **names = { "A", "B", "C" };
你可以有一个整数,对于数组的长度是常量:
int namesLen = 3;
或者添加一个sentinel值(例如NULL)
char **names = { "A", "B", "C", NULL }; int namesLen = -1; while (names[++namesLen] != NULL) { /* do nothing */} // namesLen is now the length of your array
换句话说,您可以创建一个充满所需值的结构:
struct Array { void **values; int length; }; #define array(elements...) ({ void *values[] = { elements }; array_make(values, sizeof(values) / sizeof(void *)); }) #define destroy(arr) ({ free(arr.values); }) struct Array array_make(void **elements, int count) { struct Array ret; ret.values = malloc(sizeof(void *) * count); ret.length = count; for (int i = 0; i < count; i++) { ret.values[i] = elements[i]; } return ret; }
你会这样使用它:
struct Array myArray = array("Hi", "There", "This", "Is", "A", "Test"); // use myArray printf("%i", myArray.length); destroy(myArray);
你在这里定义的不是字面上的字符串数组,它是一个指向字符的数组。 如果你想知道字符串的数量,你只需要计算指针,就像这样
size_t size = sizeof(names)/sizeof(char*);
会这样做,这样你就可以将数组的大小除以单个指针的大小。但要注意,只有在编译时知道数组的大小(即数组是静态分配的)时,这才有效,如果它是动态定义(即char **字符串)然后sizeof(strings)
将返回指针的大小而不是数组。
ps:字符串的长度不相关,因为数组甚至不知道指针指向的是什么。
int count = sizeof(names)/sizeof(*names);
这将获取names
的总大小,并将其除以names
中一个元素的大小,从而得到3。
有没有办法找到数组中的字符串数量
当然有,试试这个:
#include int main(void){ size_t size, i=0; int count=0; char* names[]={"A", "B", "C"}; size = sizeof(names)/sizeof(char*); for(i=0;i
1 - A 2 - B 3 - C
The number of strings found are 3
同样的事情:
#include int main(void){ size_t size, i=0; int count=0; char *names[]={"Jimmy", "Tom", "Michael", "Maria", "Sandra", "Madonna"}; size = sizeof(names)/sizeof(char*); for(i=0;i
输出:
1 - Jimmy 2 - Tom 3 - Michael 4 - Maria 5 - Sandra 6 - Madonna
The number of strings found are 6
或者使用这样的函数:
#include size_t arrLength(size_t len, char **arr){ size_t i=0; size_t count=0; for(i=0;i
输出:
1 - Jimmy 2 - Tom 3 - Michael 4 - Maria 5 - Sandra 6 - Madonna
The number of strings found are 6
返回数组中数字或字符串的一种简单方法是迭代数组,直到用完字符串。 这是一个例子。
#include int main() { char* names[] = {"John", "Paul", "George", "Ringo", ' '}; int size = 0; while(names[++size]!=' '); printf("Size: %dn", size); // Prints "4" return 0; }
这种方法的优点是即使弦长不同也能工作。 注意names
数组中的终止NULL字节,以及;
用于关闭while
语句的字符,因为没有要运行的语句体。
在C中查找字符串数组中的字符串数
查找数组中对象数的简单方法是将数组的大小除以其中一个元素的大小。 使用sizeof
运算符返回对象的大小(以字节为单位)。
// For size_t #include char* names[] = { "A", "B", "C" }; size_t number_of_strings = sizeof names / sizeof names[0]; printf("Number of strings %zun", number_of_strings);
重要的是要考虑从sizeof
返回的sizeof
是size_t
,一个无符号整数类型,能够索引任何数组以及任何对象的大小。 要打印size_t
类型的变量,请使用修饰符z
。
要查找字符串数组中的字符数,可以循环遍历数组元素,并在每个索引循环处遍历元素的内容(或字符串),直到您点击’ 0’。 下面的代码就是这样做的,适用于存储在数组中的任何大小的字符串
char* names[] = {"An", "Bed", "Cards"}; int arrayIndex, counter; for (arrayIndex = 0; arrayIndex < (sizeof(names)/sizeof(char*)); arrayIndex++) { //counting also chars in each string (extra, not necessarily the question) char* stringAtIndex = names[arrayIndex]; char c; int i = 0; do { c = *(stringAtIndex + i++); } while (c != ' '); counter += (i-1); //exclude terminating char ' ' } printf("Number of array elements: %d", arrayIndex+1); //number of strings printf("Total chars %dn", counter); // Prints 10 which is number of chars excluding ' '
使字符串数组在具有递增运算符的While循环中运行,直到循环变为NULL ,给出数组大小:
#include char* names[]={"A", "B", "C"}; int main(){ int nameSize = 0; while(names[++nameSize]!=' '); } for(i=0;i
输出:
需要了解更多c/c++开发分享在C中查找字符串数组中的字符串数,也可以关注C/ C++技术分享栏目---计算机技术网(www.ctvol.com)!
A B C
以上就是c/c++开发分享在C中查找字符串数组中的字符串数相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/979783.html