字符串函数汇总

  1. strlen函数实现

    strlen是计算机C语言函数,计算字符串s的(unsigned int型)长度,不包括‘\0‘在内。strlen所作的仅仅是一个计数器的工作,它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描,直到碰到第一个字符串结束符‘\0‘为止,然后返回计数器值。

    1.1 数组

int my_strlen(char s[])
{
	int i = 0;
	while (s[i] != ‘\0‘)
	{
		i++;
	}
	return i;
}

1.2 指针

//普通指针做法
int my_strlen(const char* str)
{
	assert(str);//断言

	int count=0;

	while (*str)
	{
		count++;
		str++;
	}
	return count;
}
//指针减指针得到两指针之间元素个数(仅限同一数组两指针)
int my_strlen(const char *str)
{
	assert(str);
	const char*p = str;//p为起始位置

	while (*str)
	{
		str++;
	}
	return str - p;
}
//在C语言库中(即指针减指针)
size_t _cdecl strlen(const char* str)
{
	const char *eos = str;

	while (*eos++);

	return (eos - str - 1);
}

2.  strstr函数实现

strstr() 函数搜索一个字符串在另一个字符串中的第一次出现。该函数返回字符串的其余部分(从匹配点)。该函数是二进制安全的。

char* my_strstr(char* str1, char* str2)
{
	assert(str1);
	assert(str2);

	char* ptr = str1;

	while (*ptr)
	{
		char *p1 = ptr;
		char *p2 = str2;

		while (*p2==*p1)
		{
			p1++;
			p2++;
			if (*p2 == ‘\0‘)
				return ptr;
		}
		ptr++;
	}
}

3.  strcpy函数实现

它复制以null为退出字符的存储区区块到另一个存储器区块内。由于字符串在C语言不是首要的数据型态,而是以实现的方式来替代,在存储器内以连续的字节区块组成,strcpy 可以有效复制两个配置在存储器以指针回传的字符串(字符指针或是字符串指针)

//原
void my_strcpy(char* str1, const char* str2)

{
	assert(str1);//检测指针有效性
	assert(str2);

	while (*str2)
	{
		*str1 = *str2;
		str1++;
		str2++;
	}

	*str1 = ‘\0‘;
}
//优化*1
void my_strcpy(char* str1,const char* str2)

{
	assert(str1);
	assert(str2);

	while (*str1++ = *str2++)//简化代码
	{
		;
	}
}
//优化*2
///需要链式访问将void换成char*,函数的返回值作为另一个函数的参数
char* my_strcpy(char* str1, const char* str2)

{
	assert(str1);
	assert(str2);

	char* ret = str1;

	while (*str1++ = *str2++)
	{
		;
	}

	return ret;
}

ps:附strncpy函数实现,从str2中复制n个字符到str1中

void my_strncpy(char* str1, const char* str2, int count)
{
	assert(str1);
	assert(str2);

	while (count)
	{
		*str1 = *str2;
		count--;
	}
}

4.  strcmp函数实现

字符串比较函数,两个字符串自左向右逐个字符相比(按ASCII值大小相比较),直到出现不同的字符或遇‘\0‘为止

int my_strcmp(const char*str1,const char*str2)
{
	assert(str1);
	assert(str2);
	while (*str1 == *str2)
	{
		if (*str1 == ‘\0‘)
		{
			return 0;
		}
		str1++;
		str2++;
	}
	return *str1 - *str2;
}

//方法二

int my_strcmp(const char*str1, const char*str2)
{
	assert(str1);
	assert(str2);

	while (*str1 == *str2)
	{
		if (*str1 == ‘\0‘)
		{
			return 0;
		}
		str1++;
		str2++;
	}

	if (*str1 - *str2 > 0)
	{
		return 1;
	}
	else
	{
		return -1;
	}
}

5.  strcat函数实现

strcat是连接字符串的函数。函数返回指针,两个参数都是指针,第一个参数所指向的内存的地址必须能容纳两个字符串连接后的大小。

char* my_strcat(char* str1,const char* str2)
{
	assert(str1);
	assert(str2);

	char *ret = str1;

	while (*str1)
	{
		str1++;
	}

	while (*str1++ = *str2++)
	{
		;
	}
	return ret;
}
时间: 2024-08-23 01:46:18

字符串函数汇总的相关文章

PHP部分字符串函数汇总

PHP部分字符串函数汇总 提交 我的评论 加载中 已评论 PHP部分字符串函数汇总 2015-03-10 PHP100中文网 PHP100中文网 PHP100中文网 微信号 功能介绍 互联网开发者社区,提供相关技术信息服务,技术交流着平台 我们大家知道无论哪种语言,字符串操作都是一个重要的基础,往往是简单而重要.PHP给我们提供了大量的字符串操作函数,功能强大,使用也比较简单,这里为大家总结九类字符串函数. 1. 查找字符位置函数 strpos($str,search,[int]): 查找sea

字符串函数汇总2

memcpy 内存拷贝函数,memcpy函数的功能是从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中. 函数实现 void* my_memcpy(void *buf1,const void *buf2, int count) { assert(buf1); assert(buf2 );            void *ret=buf1; char *dest = (char*)buf1; char *src = (char*)buf2; while (

PHP 字符串常用函数汇总

php中的函数很多,字符串函数也非常多,下面总结几个常用到的字符串函数.记录下来为以后翻阅. 1.字符串组合/连接 a>implode()  将一个一维数组的值转化为字符串 b>join()  别名 implode() 2.字符串分割 a>explode()  将字符串按照指定的分隔符组合成一个数组.数组中的值均是字符串的子串. b>str_split()  将字符串按照指定的长度组合成数组元素. 3.字符串截取 a>substr()  按照指定的位置和长度返回字符串的子串.

MySQL函数汇总

前言 MySQL提供了众多功能强大.方便易用的函数,使用这些函数,可以极大地提高用户对于数据库的管理效率,从而更加灵活地满足不同用户的需求.本文将MySQL的函数分类并汇总,以便以后用到的时候可以随时查看. 数学函数 (1)ABS(x) 返回x的绝对值 (2)PI() 返回圆周率π,默认显示6位小数 (3)SQRT(x) 返回非负数的x的二次方根 (4)MOD(x,y) 返回x被y除后的余数 (5)CEIL(x).CEILING(x) 返回不小于x的最小整数 (6)FLOOR(x) 返回不大于x

非常实用的PHP常用函数汇总

这篇文章主要介绍了非常实用的PHP常用函数,汇总了加密解密.字符串操作.文件操作.SQL注入等函数的实例与用法说明,在PHP项目开发中非常具有实用价值,需要的朋友可以参考下 本文实例总结了一些在php应用开发中常用到的函数,这些函数有字符操作,文件操作及其它的一些操作了,分享给大家供大家参考.具体如下: 1.PHP加密解密 PHP加密和解密函数可以用来加密一些有用的字符串存放在数据库里,并且通过可逆解密字符串,该函数使用了base64和MD5加密和解密. 复制代码 代码如下: function

C++编程常用头文件及其包含函数汇总

1. #include<iostream>是标准的C++头文件,任何符合标准的C++开发环境都有这个头文件. 当使用<iostream.h>时,相当于在c中调用库函数,使用的是全局命名空间,也就是早期的c++实现:当使用<iostream>的时候,该头文件没有定义全局命名空间,必须使用namespace std:这样才能正确使用cout.   2.#include <cstdlib>是C++里面的一个常用函数库, 等价于C中的<stdlib.h>

MySQL1:MySQL函数汇总

前言 MySQL提供了众多功能强大.方便易用的函数,使用这些函数,可以极大地提高用户对于数据库的管理效率,从而更加灵活地满足不同用户的需求.本文将MySQL的函数分类并汇总,以便以后用到的时候可以随时查看. 数学函数 (1)ABS(x) 返回x的绝对值 (2)PI() 返回圆周率π,默认显示6位小数 (3)SQRT(x) 返回非负数的x的二次方根 (4)MOD(x,y) 返回x被y除后的余数 (5)CEIL(x).CEILING(x) 返回不小于x的最小整数 (6)FLOOR(x) 返回不大于x

JavaScript之Array常用函数汇总

[20141121]JavaScript之Array常用功能汇总 *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; } /* BLOCKS =============================================================================*/ p, blockquote, ul, ol, dl, table

Mysql中常用的函数汇总

Mysql中常用的函数汇总: 一.数学函数abs(x) 返回x的绝对值bin(x) 返回x的二进制(oct返回八进制,hex返回十六进制)ceiling(x) 返回大于x的最小整数值exp(x) 返回值e(自然对数的底)的x次方floor(x) 返回小于x的最大整数值greatest(x1,x2,...,xn)返回集合中最大的值least(x1,x2,...,xn) 返回集合中最小的值ln(x) 返回x的自然对数log(x,y)返回x的以y为底的对数mod(x,y) 返回x/y的模(余数)pi(