当前位置: 首页 > article >正文

编程之路,从0开始:字符函数和字符串函数

Hello大家好!很高兴我们又见面了!

给生活添点passion,开始今天的编程之路!

 

目录

1、字符分类函数

2、字符转换函数

3、字符串函数

1、 strcpy

2、 strcat

3、 strcmp

4、strlen(s)

5、strstr(s1, s2)

6、 strtok(s1, s2)


 

1、字符分类函数

字符分类函数 如果符合就返回真

iscntrl 任何控制字符

isspace 空白字符

isdigit 十进制0到9

isxdigit 十六进制

islower 小写字母

isupper 大写字母

isalpha 字母

isalnum 字母或者数字

ispunct 标点符号

isgraph 任何图形字符

isprint 任何可打印字符

以上是字符分类函数的作用

2、字符转换函数

toupper() 函数将小写字母转换为大写字母。

tolower()函数将给定的字符转换成小写字母。

3、字符串函数

在C语言中给定的字符串函数很多

1. strcpy(s1, s2):复制字符串,将s2复制到s1。

2. strncpy(s1, s2, n):复制字符串,将s2的前n个字符复制到s1。

3. strcat(s1, s2):连接字符串,将s2连接到s1的末尾。

4. strncat(s1, s2, n):连接字符串,将s2的前n个字符连接到s1的末尾。

5. strcmp(s1, s2):比较字符串,比较s1和s2,返回值表示s1和s2的字典顺序,大于0则s1在前。

6. strncmp(s1, s2, n):比较字符串,比较s1和s2的前n个字符。

7. strlen(s):计算字符串长度,返回s的长度,不包括结尾的空字符。

8. strchr(s, c):查找字符,返回指向s中第一次出现c的指针。

9. strrchr(s, c):查找字符,返回指向s中最后一次出现c的指针。

10. strstr(s1, s2):查找子串,返回指向s1中第一次出现s2的指针。

11. strtok(s1, s2):分割字符串,使用s2中的分隔符分割s1。

12. strtok_r(s1, s2, p):分割字符串,线程安全的版本。

13. strdup(s):复制字符串,动态分配内存并复制s。

14. strndup(s, n):复制字符串,动态分配内存并复制s的前n个字符。

15. strcoll(s1, s2):比较字符串,使用当前区域设置比较s1和s2。

16. strxfrm(s1, s2):转换字符串,转换s2以便使用strcoll比较。

这些字符串函数都包含在头文件string.h中

这里我们简单介绍几个常用的函数,并对他们进行模拟实现:

1、 strcpy

复制字符串,将s2复制到s1。

函数原型:ea5d203e89cd4188b1b4119fdfe05f96.png

使用:

#include<stdio.h>
#include<stdio.h>
int main()
{
	char a[20] = "ADD";
	char b[20] = {0};
	strcpy(b,a);
	printf("%s",b);
	return 0;
}

模拟实现:

#include<stdio.h>
void My_strcpy(char *a,char *b)
{
	int i = 0;
	int* c = b;
	while (a[i] != '\0')
	{
		*(b+i) = *(a+i);
		i++;
	}

}
int main()
{
	char a[20] = "asdasd";
	char b[20] = {0};
	My_strcpy(a,b);
	printf("%s",b);
	return 0;
}

2、 strcat

连接字符串,将s2连接到s1的末尾。

函数原型:

104f451f35d241019a72febfc87ec8f8.png

使用:

#include<stdio.h>
#include<stdio.h>
int main()
{
	char a[20] = "GET SOME";
	char b[20] = " PASSION";
	strcat(a,b);
	printf("%s",a);
	return 0;
}

模拟实现:

#include<stdio.h>
void My_strcat( char *a,const char *b)
{
	int i = 0;
	while (*a!='\0')
	{
		a++;
	}
	while (*a = *b)
	{
		a++;b++;
	}
	
}
int main()
{
	char a[20] = "ADD";
	char b[20] = "PASSION";
	My_strcat(a,b);
	printf("%s",a);
	return 0;
}

3、 strcmp

比较字符串,比较s1和s2,返回值表示s1和s2的字典顺序,大于0则s1在前。

a4147315c79e48999d9899dabbcd53e2.png

使用:

#include<stdio.h>
#include<stdio.h>
int main()
{
	char a[20] = "GET SOME";
	char b[20] = " PASSION";
	if (strcmp(a, b) > 0)
	{
		printf("%s", a);
	}
	
	return 0;
}

模拟实现:

#include<stdio.h>
int My_strcmp(const char *a,const char *b)
{
	int i = 0;
	int* c = b;
	while (*a==*b)
	{
		if (*a == '\0')
		{
			return 0;
		}
		a++;b++;
	}
	return *a - *b;
}
int main()
{
	char a[20] = "asdasd";
	char b[20] = "asa";
	int ret=My_strcmp(a,b);
	printf("%d",ret);
	return 0;
}

4、strlen(s)

计算字符串长度,返回s的长度,不包括结尾的空字符。

fe3950fcf9ef400e95d8ddd56c4aec0b.png

使用:前面已经多次使用了,这里不再举例。

模拟实现:

#include<stdio.h>
int My_strlen(char *arr)
{
	int i = 0;
	int len = 0;
	for (i = 0;arr[i] != '\0';i++)
	{
		len++;
	}
	return len;
}
int main()
{
	char a[]="asdasd";
	int len = My_strlen(a);
	printf("%d",len);
	return 0;
}

5、strstr(s1, s2)

查找子串,返回指向s1中第一次出现s2的指针。

a46d69b22cd94a3d8bc0b68a8f7cbef5.png使用:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
int main()
{
	char a[20] = "PASSION";
	char b[20] = "SS";
	char* c = strstr(a, b);
	printf("%s",c);
	return 0;
}

模拟实现:

#define _CRT_SECURE_NO_WARNINGS 1
#include  <stdio.h>
char *Mystrstr(const char a[], char* p)
{
    char* str = (char*)a;
    char* i=a;
    char* j = p;
    if (!*p)
    {
        return a;
    }
    while (*str)
    {
        i = str;
        j = (char*)p;
        while (*i && *j && (*i == *j))
        {
            i++;
            j++;
        }
        if (!*j)
        {
            return str;
        }
        str++;
    }

    return (NULL);

}
int main()
{
    char a[20] = "asdfghjkl";
    char* ret = Mystrstr(a,"dfg");
    printf("%s",ret);
    return 0;
}

6、 strtok(s1, s2)

分割字符串,使用s2中的分隔符分割s1。

cdae523c380541c6beae15ecb46f50cd.png使用:

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>
#include <string.h>

int main()
{
    char str[100] = "- This, a sample string.";
    char* pch = strtok(str, " ,.-");
    //将地址保存到遇到停止符之前,打印到遇到下一个停止符的时候
    printf("%s\n",pch);
    //pch = strtok(NULL, " ,.-");
    //第二次使用这个函数就将第一个参数换位NULL
    return 0;
}

        这个函数有点复杂,就不模拟实现了hhh~

        今天的内容就分享到这,欢迎订阅我们的专栏:编程之路,获取更多高质量内容!

 


http://www.kler.cn/a/392287.html

相关文章:

  • 深入理解接口测试:实用指南与最佳实践5.0(一)
  • OpenHarmony4.1蓝牙芯片如何适配?触觉智能RK3568主板SBC3568演示
  • Ai创作新风标!仅需三步,利用ai工具免费制作抖音爆款的动物融合视频(含完整的步骤)
  • 红日靶机(七)笔记
  • 实战指南:理解 ThreadLocal 原理并用于Java 多线程上下文管理
  • LLM - 使用 LLaMA-Factory 微调大模型 Qwen2-VL SFT(LoRA) 图像数据集 教程 (2)
  • 基于微信小程序的电子购物系统的设计与实现
  • Javascript高级—闭包问题
  • 【JavaSE】(5)继承
  • 河南省的一级科技查新机构有哪些?
  • Linux redis-6.2.6安装
  • Spring Cloud Contract快速入门Demo
  • SwiftUI 高级开发教程系列 - 第 2 章:组合视图与修饰符
  • Linux python程序打包方式
  • MyBatis及相关文件配置
  • -bash: /home/xxx/anaconda3/bin/conda: No such file or directory
  • Leetcode 每日一题 12.整数转罗马数字
  • 云原生-docker安装与基础操作
  • C/C++中使用MYSQL
  • 基于STM32的智能门禁系统设计
  • 达梦数据库DM管理工具增删改不生效怎么办?如何设置事务自动提交?
  • 从0开始学习Linux——用户管理
  • 索引的工作流程与执行原理
  • 【Qt】QtCreator安装安卓环境
  • React Query在现代前端开发中的应用
  • Mysql高可用架构方案