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

c语言中常用的字符串处理函数总结

文章目录

  • 前言
  • 一、strlen函数使用
    • 1、 使用
    • 2、实现方法
  • 二、strcpy函数使用
    • 1、使用
    • 2、实现方法
  • 三、strcat函数使用
    • 1、使用
    • 2、实现方法
  • 四、strcmp函数使用
    • 1、使用
    • 2、实现方法


前言

c语言中常用的字符串处理函数strlen函数,strcpy函数,strcat函数,strcmp函数总结。


一、strlen函数使用

1、 使用

strlen函数返回的是在字符串中的个数,但不包含字符串结束符’\0’

#include<stdio.h>
#include<string.h>
int main()
{
        char str1[] = "abcdef";
        printf("%ld\n", strlen(str1));
        return 0;
}
执行
```cpp
# gcc strlen.c  -o strlen
./strlen
6

2、实现方法

#include<stdio.h>
#include<string.h>
size_t Strlen_char(const char* str1)
{
	size_t len = 0;
	while (*str1 != 0)
	{
		len++;
		str1++;
	}
	return len;
}
int main()
{
	char* str1 = "abcdef";
	printf("%ld\n", Strlen_char(str1));
	return 0;
}

执行

# gcc strlen.c  -o strlen
./strlen
6

二、strcpy函数使用

1、使用

原型:

char *strcpy(char * destination, const char *source );

strcpy是覆盖拷贝,将source全覆盖拷贝到destination,会把’\0’也拷过去,estination的空间必须>=source的空间

#include<stdio.h>
#include<string.h>
int main()
{
	char p1[] = "abcde";
	char* p2  = "hello";
	strcpy(p1, p2);
	printf("%s\n", p1);
	printf("%s\n", p2);
	return 0;
}

执行

# gcc strcpy.c  -o strcpy
#  ./strcpy
hello
hello

2、实现方法

#include<stdio.h>
#include<string.h>
void stringcpy(char* char1 , const char *char2){
	while(*char2){
		*char1 = *char2;
		char1++;
		char2++;
		//验证添加char1 = '\0';
		if(*char2=='\0'){
			printf("退出while循环,不执行*char1 = *char2; 没有赋值给char1结束符");
			printf("\n");
		}
	}
	*char1 = '\0';//添加char1 = '\0';
}

int main()
{
	char   str1[5] = "abcde";
	const char* p  = "hello";
	stringcpy(str1, p);
	printf("%s\n", str1);
	printf("%s\n", p);
	return 0;
}

执行

$ gcc strcpy.c  -o strcpy
$ ./strcpy
退出while循环,不执行*char1 = *char2; 没有赋值给char1结束符
hello
hello

三、strcat函数使用

1、使用

原型:

char *strcat ( char * destination, const char * source );

strcat追加拷贝,追加到目标空间后面,目标空间必须足够大,能容纳下源字符串的内容

#include<stdio.h>
#include<string.h>
int main()
{
	char    p1[20] = "Hello";
	const char* p2 = "World";
	strcat(p1, p2);
	printf("%s\n",p1);
	return 0;
}

$ gcc strcat.c  -o strcat
$ ./strcat
HelloWorld

2、实现方法

#include<stdio.h>
#include<string.h>
void stringcat(char *str1,const char *str2){
	while(*str1){
		str1++;
	}//str1结束循环,当前是str1的存放值是'\0'
	if(*str1=='\0'){
		while(*str2){
		*str1 = *str2;//str2的首个字符 W,替换赋值当前是str1的存放值是'\0'
		str1++;
		str2++;
	    }
	   str1='\0';	
	}
}
int main()
{
	char    p1[20] = "Hello";
	const char* p2 = "World";
	stringcat(p1, p2);
	printf("%s\n",p1);
	return 0;
}

执行


$ gcc strcat.c  -o strcat
$ ./strcat
HelloWorld

四、strcmp函数使用

原型

int strcmp ( const char * str1, const char * str2 );

strcmp比较两个字符串的大小,一个字符一个字符比较,按ASCII码比较
规定:
第一个字符串大于第二个字符串,则返回大于0的数字
第一个字符串等于第二个字符串,则返回0
第一个字符串小于第二个字符串,则返回小于0的数字

注意:strcmp函数比较两字符串的大小,和字符串本身长度无关

1、使用

#include<stdio.h>
#include<string.h>
int main()
{
	char* p1 = "abc";
	char* p2 = "abc";
	char* p3 = "abcd";
	char* p4 = "e";
	printf("----------------------\n");
	printf("           %d\n", strcmp(p1,p2 ));
  	printf("----------------------\n");
	printf("           %d\n", strcmp(p2,p3));  
	printf("           %d\n", strcmp(p3,p2)); 
	printf("----------------------\n");
	printf("           %d\n", strcmp(p3,p4));//ASCII   'a' - 'e' =  97 - 101 = -4
	printf("           %d\n", strcmp(p4,p3)); //ASCII  'a' - 'e' =  101 - 4  = -4
	printf("           %d\n", 'a');
	printf("           %d\n", 'e');

} 
}

执行

$ gcc strcmp.c  -o strcmp
$ ./strcmp
----------------------
           0
----------------------
           -100
           100
----------------------
           -4
           4
           97
           101

2、实现方法

#include<stdio.h>
#include<string.h>
int Strintcmp(const char * str1, const char * str2)
{
    //1、两个不同的字符串比较时,直接 return (*str1-*str2);//返回两字符相减的ASCII码值
	//2、字符串相同时进入while循环,字符串结束符是'\0',添加一个循环的结束条件!(*str1|*str2)=='\0')
	while ((*str1 == *str2)&&(!(*str1|*str2)=='\0')){
		str1++;
		str2++;
	}
  return (*str1-*str2);//返回两字符相减的ASCII码值
}

int main()
{
	char* p1 = "abc";
	char* p2 = "abc";
	char* p3 = "abcd";
	char* p4 = "e";
	printf("----------------------\n");
	printf("           %d\n", Strintcmp(p1,p2 ));
  	printf("----------------------\n");
	printf("           %d\n", Strintcmp(p2,p3));  
	printf("           %d\n", Strintcmp(p3,p2)); 
	printf("----------------------\n");
	printf("           %d\n", Strintcmp(p3,p4));  
	printf("           %d\n", Strintcmp(p4,p3)); 
	printf("           %d\n", 'a');
	printf("           %d\n", 'e');

} 

执行

$ gcc strcmp.c  -o strcmp
$ ./strcmp
----------------------
           0
----------------------
           -100
           100
----------------------
           -4
           4
           97
           101

相关文章:

  • ESP-01S使用AT指令连接阿里云
  • 第十四届蓝桥杯模拟赛第二期部分题答案(C++代码)
  • 面试半年,上个月成功拿到阿里offer,全靠我啃烂了学长给的这份笔记
  • 【RTS】安海波老师:SIP与RTC融合分享笔记
  • 网站都变成灰色了,它是怎么实现的?
  • JavaWeb中文件上传与下载
  • 信奥赛一本通题解目录(未做完)
  • YOLO系列算法改进方法 | 目录一览表
  • 粒子群算法和鲸鱼算法的比较(Matlab代码实现)
  • HTML5期末大作业:HTM+CSS+JS仿安徽开放大学官网(web前端网页制作课作业)
  • C语言:动态内存分配(3)
  • 基于纳芯微产品的尾灯方案介绍
  • 设置程序以管理员权限运行无效问题的排查过程分享
  • MySQL密码不要用0开头!!!
  • Java项目:ssm高校党员管理系统
  • 【node学习】协程
  • Android 架构优化~MVP 架构改造
  • CODING 缺陷管理功能正式开始公测
  • gops —— Go 程序诊断分析工具
  • JavaScript实现分页效果
  • JavaWeb(学习笔记二)
  • Java教程_软件开发基础
  • js写一个简单的选项卡
  • nginx(二):进阶配置介绍--rewrite用法,压缩,https虚拟主机等
  • Synchronized 关键字使用、底层原理、JDK1.6 之后的底层优化以及 和ReenTrantLock 的对比...
  • 记一次删除Git记录中的大文件的过程
  • 开源SQL-on-Hadoop系统一览
  • 如何优雅地使用 Sublime Text
  • 温故知新之javascript面向对象
  • 一些css基础学习笔记
  • 用Python写一份独特的元宵节祝福
  • 原生JS动态加载JS、CSS文件及代码脚本
  • 自动记录MySQL慢查询快照脚本
  • ​ssh免密码登录设置及问题总结
  • (26)4.7 字符函数和字符串函数
  • (Java实习生)每日10道面试题打卡——JavaWeb篇
  • (ZT)薛涌:谈贫说富
  • (附源码)spring boot校园健康监测管理系统 毕业设计 151047
  • (附源码)ssm基于jsp高校选课系统 毕业设计 291627
  • (七)Knockout 创建自定义绑定
  • (一)【Jmeter】JDK及Jmeter的安装部署及简单配置
  • (原創) 人會胖會瘦,都是自我要求的結果 (日記)
  • (转)Groupon前传:从10个月的失败作品修改,1个月找到成功
  • . NET自动找可写目录
  • .htaccess配置重写url引擎
  • .NET 反射 Reflect
  • @软考考生,这份软考高分攻略你须知道
  • [ C++ ] STL_vector -- 迭代器失效问题
  • [C#]C# OpenVINO部署yolov8图像分类模型
  • [C++]高精度 bign (重载运算符版本)
  • [C++进阶篇]STL中vector的使用
  • [IE编程] WebBrowser控件的多页面浏览(Tabbed Browsing)开发接口
  • [iOS]Win8下iTunes无法连接iPhone版本的解决方法
  • [JavaEE]线程的状态与安全
  • [JDBC-1] JDBC Base Template