Error[8]: Undefined offset: 2, File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 121
File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 473, decode(

求字符串的长度,很多人都会直接想到用strlen函数,只需要头文件string.h就可以很轻松的实现,但对于我们c语言的初学者,也应该尝试用其他方法来进行实现,除了strlen函数外有三种方法可供参考。


1.strlen

#include 
#include 
int main()
{
	char arr[100]={0};
	gets(arr);
	int len = strlen(arr);
	printf("%d\n", len);
	return 0;
}

注意头文件string.h即可。


2.计数器方法

int my_strlen(char* str)
{
	int count = 0;
	while (*str != 'int my_strlen(const char* str)
{
	char* temp = str;
	assert(str != NULL);//断言保证指针的有效性
	while (*str != '[+++]')
	{
		str++;
	}
	return str-temp;
}

int main()
{
	char arr[100];
	gets(arr);
	int len = my_strlen(arr);
	printf("%d\n", len);
	return 0;
}')
	{
		count++;
		str++;
	}
	return count;
}

int main()
{
	char arr[100];
	gets(arr);
	int len = my_strlen(arr);
	printf("%d\n", len);
	return 0;
}

分析:首先输入字符串,定义指针变量指向首元素地址,'\0'是字符串结束标志,只要指向的数组元素不等于‘0’,就指向下一个数组元素,同时count++,两个变量一个访问元素一个计数,我们还可以进行略微的优化。


优化:

#include 
#include //断言的头文件
int my_strlen(const char* str)//const使*str不再改变
{
	int count = 0;
	assert(str != NULL);//断言保证指针的有效性
	while (*str != '\0')
	{
		count++;
		str++;
	}
	return count;
}

int main()
{
	char arr[100];
	gets(arr);
	int len = my_strlen(arr);
	printf("%d\n", len);
	return 0;
}

分析:第一点修改在定义指针变量时我们可以在char前添加一个const,const声明变量后这个变量就不能再改变,const添加有两个位置,一是char* const str,也就是指针常量,二是const char* str,也就是常量指针,这两种效果是截然不同的,第一种是const修饰str,指针常量指向的地址不能改变,但是地址中的数值是可以改变的,可以通过其他指向该地址的指针来改变 ,第二种是修饰*str,不能通过这个指针改变变量的值。


指针指向的值不能改变,但指针本身可以是可以改变指向其他地址的,这里不过多讨论。


因为我们要求字符串的长度,因此肯定不希望字符串的值被改变,所以可以定义常量指针来实现。


第二点修改可以添加一个断言,他的作用是若为真无事发生,若为假则报错,可以保证指针的有效性。


3.指针方法

[+++]

分析:定义常量指针指向数组arr,此时str指向arr首元素地址,同时定义指针temp也指向arr首元素地址,此时令str逐个访问arr中的元素直到遇到‘\0’结束,两个地址相减得到的即为中间元素个数。


4.函数递归方法

#include 
int my_strlen(const char* str)
{
	assert(str != NULL);
	if (*str != '\0')
		return 1 + my_strlen(str + 1);
	else
		return 0;
}

int main()
{
	char arr[100];
	gets(arr);
	int len = my_strlen(arr);
	printf("%d\n", len);
	return 0;
}

分析:依旧是定义常量指针,在定义的函数中如果*str不等于‘\0’,就执行return 1 + my_strlen(str + 1),第一次执行后返回1,同时继续调用my_strlen函数,令str指向第二个元素,倘若第二个元素依旧不等于'\0',就返回1,指向第三个元素,继续调用函数,直到指向下一个元素为'\0'时终止。


)
File: /www/wwwroot/outofmemory.cn/tmp/route_read.php, Line: 126, InsideLink()
File: /www/wwwroot/outofmemory.cn/tmp/index.inc.php, Line: 165, include(/www/wwwroot/outofmemory.cn/tmp/route_read.php)
File: /www/wwwroot/outofmemory.cn/index.php, Line: 30, include(/www/wwwroot/outofmemory.cn/tmp/index.inc.php)
Error[8]: Undefined offset: 3, File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 121
File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 473, decode(

求字符串的长度,很多人都会直接想到用strlen函数,只需要头文件string.h就可以很轻松的实现,但对于我们c语言的初学者,也应该尝试用其他方法来进行实现,除了strlen函数外有三种方法可供参考。


1.strlen

#include 
#include 
int main()
{
	char arr[100]={0};
	gets(arr);
	int len = strlen(arr);
	printf("%d\n", len);
	return 0;
}

注意头文件string.h即可。


2.计数器方法

int my_strlen(char* str)
{
	int count = 0;
	while (*str != 'int my_strlen(const char* str)
{
	char* temp = str;
	assert(str != NULL);//断言保证指针的有效性
	while (*str != '')
	{
		str++;
	}
	return str-temp;
}

int main()
{
	char arr[100];
	gets(arr);
	int len = my_strlen(arr);
	printf("%d\n", len);
	return 0;
}')
	{
		count++;
		str++;
	}
	return count;
}

int main()
{
	char arr[100];
	gets(arr);
	int len = my_strlen(arr);
	printf("%d\n", len);
	return 0;
}

分析:首先输入字符串,定义指针变量指向首元素地址,'\0'是字符串结束标志,只要指向的数组元素不等于‘0’,就指向下一个数组元素,同时count++,两个变量一个访问元素一个计数,我们还可以进行略微的优化。


优化:

#include 
#include //断言的头文件
int my_strlen(const char* str)//const使*str不再改变
{
	int count = 0;
	assert(str != NULL);//断言保证指针的有效性
	while (*str != '\0')
	{
		count++;
		str++;
	}
	return count;
}

int main()
{
	char arr[100];
	gets(arr);
	int len = my_strlen(arr);
	printf("%d\n", len);
	return 0;
}

分析:第一点修改在定义指针变量时我们可以在char前添加一个const,const声明变量后这个变量就不能再改变,const添加有两个位置,一是char* const str,也就是指针常量,二是const char* str,也就是常量指针,这两种效果是截然不同的,第一种是const修饰str,指针常量指向的地址不能改变,但是地址中的数值是可以改变的,可以通过其他指向该地址的指针来改变 ,第二种是修饰*str,不能通过这个指针改变变量的值。


指针指向的值不能改变,但指针本身可以是可以改变指向其他地址的,这里不过多讨论。


因为我们要求字符串的长度,因此肯定不希望字符串的值被改变,所以可以定义常量指针来实现。


第二点修改可以添加一个断言,他的作用是若为真无事发生,若为假则报错,可以保证指针的有效性。


3.指针方法

[+++]

分析:定义常量指针指向数组arr,此时str指向arr首元素地址,同时定义指针temp也指向arr首元素地址,此时令str逐个访问arr中的元素直到遇到‘\0’结束,两个地址相减得到的即为中间元素个数。


4.函数递归方法

#include 
int my_strlen(const char* str)
{
	assert(str != NULL);
	if (*str != '\0')
		return 1 + my_strlen(str + 1);
	else
		return 0;
}

int main()
{
	char arr[100];
	gets(arr);
	int len = my_strlen(arr);
	printf("%d\n", len);
	return 0;
}

分析:依旧是定义常量指针,在定义的函数中如果*str不等于‘\0’,就执行return 1 + my_strlen(str + 1),第一次执行后返回1,同时继续调用my_strlen函数,令str指向第二个元素,倘若第二个元素依旧不等于'\0',就返回1,指向第三个元素,继续调用函数,直到指向下一个元素为'\0'时终止。


)
File: /www/wwwroot/outofmemory.cn/tmp/route_read.php, Line: 126, InsideLink()
File: /www/wwwroot/outofmemory.cn/tmp/index.inc.php, Line: 165, include(/www/wwwroot/outofmemory.cn/tmp/route_read.php)
File: /www/wwwroot/outofmemory.cn/index.php, Line: 30, include(/www/wwwroot/outofmemory.cn/tmp/index.inc.php)
c语言求字符串长度的三种方法_C_内存溢出

c语言求字符串长度的三种方法

c语言求字符串长度的三种方法,第1张

求字符串的长度,很多人都会直接想到用strlen函数,只需要头文件string.h就可以很轻松的实现,但对于我们c语言的初学者,也应该尝试用其他方法来进行实现,除了strlen函数外有三种方法可供参考。


1.strlen

#include 
#include 
int main()
{
	char arr[100]={0};
	gets(arr);
	int len = strlen(arr);
	printf("%d\n", len);
	return 0;
}

注意头文件string.h即可。


2.计数器方法

int my_strlen(char* str)
{
	int count = 0;
	while (*str != 'int my_strlen(const char* str)
{
	char* temp = str;
	assert(str != NULL);//断言保证指针的有效性
	while (*str != '')
	{
		str++;
	}
	return str-temp;
}

int main()
{
	char arr[100];
	gets(arr);
	int len = my_strlen(arr);
	printf("%d\n", len);
	return 0;
}')
	{
		count++;
		str++;
	}
	return count;
}

int main()
{
	char arr[100];
	gets(arr);
	int len = my_strlen(arr);
	printf("%d\n", len);
	return 0;
}

分析:首先输入字符串,定义指针变量指向首元素地址,'\0'是字符串结束标志,只要指向的数组元素不等于‘0’,就指向下一个数组元素,同时count++,两个变量一个访问元素一个计数,我们还可以进行略微的优化。


优化:

#include 
#include //断言的头文件
int my_strlen(const char* str)//const使*str不再改变
{
	int count = 0;
	assert(str != NULL);//断言保证指针的有效性
	while (*str != '\0')
	{
		count++;
		str++;
	}
	return count;
}

int main()
{
	char arr[100];
	gets(arr);
	int len = my_strlen(arr);
	printf("%d\n", len);
	return 0;
}

分析:第一点修改在定义指针变量时我们可以在char前添加一个const,const声明变量后这个变量就不能再改变,const添加有两个位置,一是char* const str,也就是指针常量,二是const char* str,也就是常量指针,这两种效果是截然不同的,第一种是const修饰str,指针常量指向的地址不能改变,但是地址中的数值是可以改变的,可以通过其他指向该地址的指针来改变 ,第二种是修饰*str,不能通过这个指针改变变量的值。


指针指向的值不能改变,但指针本身可以是可以改变指向其他地址的,这里不过多讨论。


因为我们要求字符串的长度,因此肯定不希望字符串的值被改变,所以可以定义常量指针来实现。


第二点修改可以添加一个断言,他的作用是若为真无事发生,若为假则报错,可以保证指针的有效性。


3.指针方法

 

分析:定义常量指针指向数组arr,此时str指向arr首元素地址,同时定义指针temp也指向arr首元素地址,此时令str逐个访问arr中的元素直到遇到‘\0’结束,两个地址相减得到的即为中间元素个数。


4.函数递归方法

#include 
int my_strlen(const char* str)
{
	assert(str != NULL);
	if (*str != '\0')
		return 1 + my_strlen(str + 1);
	else
		return 0;
}

int main()
{
	char arr[100];
	gets(arr);
	int len = my_strlen(arr);
	printf("%d\n", len);
	return 0;
}

分析:依旧是定义常量指针,在定义的函数中如果*str不等于‘\0’,就执行return 1 + my_strlen(str + 1),第一次执行后返回1,同时继续调用my_strlen函数,令str指向第二个元素,倘若第二个元素依旧不等于'\0',就返回1,指向第三个元素,继续调用函数,直到指向下一个元素为'\0'时终止。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/584879.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-12
下一篇 2022-04-12

发表评论

登录后才能评论

评论列表(0条)

保存