判断数组的长度

在编程中有时长需要判断一个数组的长度。

c/c++
strlen(str)和str.length()和str.size()都可以求字符串长度。
其中str.length()和str.size()是用于求string类对象的成员函数
strlen(str)是用于求字符数组的长度,其参数是char*。

(1) 首先说明string中成员函数length()和size()。它们的功能一样返回字符串(只能是字符串,字符不可以使用)的长度,单位是字节。
(2)strlen(…)是函数,要在运行时才能计算。参数必须是字符型指针(char*)。当数组名作为参数传入时,实际上数组就退化成指针了。
它的功能是:返回字符串的长度。该字符串可能是自己定义的,也可能是内存中随机的,该函数实际完成的功能是从代表该字符串的第一个地址开始遍历,直到遇到结束符’\0’。返回的长度大小不包括’\0’。

在这里插入图片描述
如图所示:m【】和b【】的长度本应都是5,但是strlen()使用输出的为2。(这是strlen()函数的缺陷,遇到’\0‘就结束)。
(3)如何求整形数组的长度呢,需要用到sizeof()函数进行使用。

#include<bits/stdc++.h>
using namespace std;
//求数组的长度 
template <typename T>
int count(T& n)
{
 int s1=sizeof(n);
 int s2=sizeof(n[0]);
 return s1/s2;
}
int main()
{
 int a[]={1,2,3};
 char m[]={'a','b','\0','c','d'};
 char b[]={"ab\0c"};  
 string c="asdasddddda";
 cout<<count(a)<<endl;   //整形数组的长度 
 cout<<count(m)<<endl;   //字符行数组的长度 
 cout<<c.size()<<endl;  //字符串数组的长度可用size()或length()函数来求 
 cout<<strlen(b)<<endl;  //strlen()函数可用来求字符数组的长度。 
 cout<<sizeof(b)<<""<<sizeof('a')<<sizeof("a");  //b的大小是5, "a"是字符串,包含'a和'\0'.返回的是2
 cout<<sizeof(c);  //其等于string类的大小。 
 return 0;
}
在C++中,判断数组长度通常有两种方法: ### 方法一:使用`sizeof`运算符 在C++中,可以利用`sizeof`关键字获取数组的字节数量。由于数组的大小等于其最后一个元素的地址与第一个元素的地址之差再减去数组的第一个元素的偏移量,对于基本数据类型的数组而言,这种方法直接返回的是该类型占内存的数量乘以数组的元素数。 ```cpp int arr[] = {0, 1, 2, 3}; int length = sizeof(arr) / sizeof(arr); ``` 在这个例子中,`arr`是一个整型数组,包含4个元素。`sizeof(arr)`返回整个数组占用的字节大小,即16(通常是)。`sizeof(arr)`返回单个整型元素占用的字节大小,通常是4。所以通过将数组总大小除以单个元素大小,我们得到了数组长度4。 ### 方法二:使用指针计算 如果数组被声明为`const char *str`这样的形式,则可以直接通过指针加法来获取数组长度。 ```cpp const char str[] = "Hello World"; const char *end = str + sizeof(str); ``` 这里首先声明了一个常量字符指针`str`指向字符串"Hello World"。然后创建一个新的指针`end`,使得它指向字符串的结束位置。由于`str`本身就是数组名,因此`sizeof(str)`等同于得到`str`所指向数组长度,而`str + sizeof(str)`则等价于指向下标为数组长度的位置,这个值就是字符串的结束标志`\0`的地址。因此,`end - str`就可以得到原始字符串的长度。 ### 相关问题: 1. **为什么不能直接访问数组的大小属性**?在C++中,数组并不是一个类实例,因此没有大小作为成员变量。`sizeof`运算符用于计算数组的大小。 2. **何时应该使用`sizeof`和何时使用指针计算数组长度**?当数组包含复杂类型如结构体、类或其他非简单类型时,应使用`sizeof`结合类型信息来计算数组长度;当数组由基本类型组成且不需要考虑类型大小差异时,使用指针计算更为直观简洁。 3. **如何处理动态分配的数组**?对动态分配的数组,可以使用`strlen()`函数(对于char*)或使用STL中的`std::vector`容器,它们提供自动管理大小的功能,不需要手动计算长度
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值