C语言字符函数和字符串函数

1.strlen(求字符串长度)

要有头文件 #include <string.h>h

字符串以'\0'作为结束标志,strlen函数返回字符串中'\0'前面出现的字符个数(不包含'\0'),函数返回值是无符号的

因为返回的是无符号数,所以一定是正数大于0

参数指向的字符串要以'\0'结束

复制代码
size_t strlen (const char* str);

2.模拟实现strlen

assert断言 (指针是否是空指针)

1)计数器

复制代码
#include <stdio.h>
#include <string.h>
#include <assert.h>
int mystrlen(const char*str){
	int count=0;
	assert(str);
	while(*str!='\0'){
		count++;
		str++;
	}
	return count;
	
}
int main(){
	char arr[]="hello";
	int len=mystrlen(arr);
	printf("%d\n",len);
	return 0;
} 

2)递归 (不创建临时变量,求字符串长度)

复制代码
int mystrlen(const char*str){
	if(*str!='\0')
	return 1+mystrlen(str+1);
	else
	return 0;
}

3)指针-指针

复制代码
	const char*des=str;
	while(*str!='\0'){
		str++;
	}
	int count=str-des;
	return count;
}

2.strcpy

拷贝

复制代码
char * strcpy(char * destination,const char * source)

源字符串必须以'\0'结束,源字符串中的'\0'也会拷贝到目标空间,目标空间要足够大且可变

2.模拟实现

复制代码
char*mystrcpy(char *dest,const char*src){
	assert(dest&&src);
	char*ret=dest;//返回目标空间起始地址 
	while(*dest++=*src++){
		;
	}
	return ret;
}
int main(){
	char arr1[]="haha";
	char arr2[20]={0};
	mystrcpy(arr2,arr1);
	printf("%s",arr2);
	return 0;
}

3.strcat(追加)

复制代码
char * strcat(char * destination,const char * source)

从目标字符串的'\0'位置开始追加,并把自己的'\0'也添加到目标字符串

2.模拟实现

复制代码
#include <stdio.h>
#include <string.h>
#include <assert.h>
char *mystrcat(char* dest,const char*src){
	assert(dest&&src);
	char*ret=dest;
	while(*dest!='\0'){
		dest++;
	}
	while(*dest++=*src++){
		;
	}
	return ret;
}

4.strcmp(字符串比较)

复制代码
int strcmp (const char *str1,const char*str2)

比较规则:第一个字符串大于第二个字符串(比较对应的字符)返回大于0的数,等于返回0,小于返回小于0的数;

2.模拟实现

复制代码
	assert(str1 && str2);
	while(*str1==*str2){
		if(*str1=='\0')
			return 0;
		str1++;
		str2++;
	}
	if(*str1>*str2)
		return 1;
	else 
		return -1;
}

5.strncpy

复制代码
char* strncpy(char *destination,const char *source,size_t num);

拷贝num个字符到目标空间,如果源字符串的长度小于num,则在后边追加0,直到num个

6.strncat

复制代码
char* strncat(char *destination,const char *source,size_t num);

7.strncmp

复制代码
int strncmp(const char*str1,const char*str2,size_t num);

8.strstr

复制代码
char * strstr(const char*str1,const char*str2);

( 用于查找一个字符串在另一个字符串中的首次出现位置)

  • 如果找到了 str2子串,strstr 函数会返回指向 str1 中第一次出现 str2 的位置的指针。
  • 如果没有找到 str2,或者 str2 是空字符串(只包含终止符 \0),则返回 str1本身

9.strtok

复制代码
char* strtok(char * str,const char* sep);

strtok 函数用于将字符串分割成一系列的子字符串(标记)

sep参数字符串,定义了用作分隔符的字符集合

str:这是要分割的原始字符串。在首次调用 strtok 时,应提供完整的字符串;在后续调用中,应该传入 NULL,这表示继续使用上次调用 strtok 后剩余的部分进行分割

  • strtok 返回指向下一个标记(子字符串)的指针。
  • strtok 返回指向下一个标记(子字符串)的指针。

10.strerror

strerror 函数用于将错误代码转换为对应的错误消息字符串,通常与 <errno.h> 头文件一起使用,因为错误代码通常保存在 errno 变量中。

11.memcpy

复制代码
void *memcpy(void *dest, const void *src, size_t n);

memcpy 函数用于在内存中复制一块数据

  • dest:目标地址,即要复制到的内存区域的起始地址。
  • src:源地址,即要复制的内存区域的起始地址。
  • n:要复制的字节数

memcpy 返回指向目标内存区域 dest 的指针

12.memmove

复制代码
void *memmove(void *dest, const void *src, size_t n);

memmove 函数用于在内存中复制一块数据,与 memcpy 类似,但它允许源和目标内存区域重叠。

memmove 允许源和目标内存区域重叠。它会正确处理重叠的情况,确保数据不会被意外覆盖

复制代码
#include <stdio.h>
#include <string.h>

int main() {
    char str[50] = "Hello, world!";

    // 将 "world!" 移动到 "Hello, " 的位置
    memmove(str + 7, str + 13, 6);

    printf("String after memmove: %s\n", str);

    return 0;
}

13.memcmp

复制代码
int memcmp(const void *s1, const void *s2, size_t n);

memcmp 函数用于比较两个内存区域的内容,

  • s1:指向第一个内存区域的指针。
  • s2:指向第二个内存区域的指针。
  • n:要比较的字节数
  • 如果两个内存区域的前 n 个字节完全相同,memcmp 返回 0。
  • 如果 s1 的前 n 个字节小于 s2 的前 n 个字节,memcmp 返回一个小于 0 的值。
  • 如果 s1 的前 n 个字节大于 s2 的前 n 个字节,memcmp 返回一个大于 0 的值

memcmp 比较的是内存区域的二进制内容,而不是字符内容。因此,它适用于任何形式的二进制数据。适用于比较任何形式的二进制数据。它不仅限于字符串,还可以用于数组、结构体等复杂数据类型的比较

相关推荐
Yunovian1 小时前
AI时代,针对模型与应用,浅谈一下各编程语言
开发语言·c++·人工智能·python·ai·rust·ai编程
周杰伦fans2 小时前
构建真正智能的CAD AI绘图代理
开发语言·人工智能·c#
心中有你02142 小时前
C语言埃氏筛法(素数筛选)
c语言·数据结构·算法
zhanghaha13144 小时前
Python进阶教程:35_PyQt (保姆级零基础教程)
开发语言·python·pyqt
释厄6234 小时前
多黑洞具现论·物理/生物/金融三域显化·虚拟宇宙黑洞·奇点=0 圆圈
开发语言·数据结构·人工智能·程序人生·安全威胁分析
Fruit_Caller6 小时前
static
开发语言·c++
codigger11 小时前
ObjectSense:一门千行内核、把可靠性写进骨子里的面向对象脚本语言
开发语言·编程·编程语言
晓蛋6 天前
c语言指的是什么意思
c语言·编译器·编程开发·集成开发环境·程序实例
小羊没烦恼!6 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
傲世仙尊6 天前
目录即文件-Ext文件系统收尾篇
linux·c语言