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

11.字符函数和字符串函数

字符函数

  • 11.1求字符串长度
    • strlen
      • strlen模拟
  • 11.2长度不受限制的字符串函数
    • strcpy

11.1求字符串长度

strlen

Get the length of a string.
size_t strlen( const char *string );

typedef unsigned int size_t;
strlen 返回值为 unsigned int
strlen返回字符串中 \0 前面出现的字符个数
参数指向的字符串必须要以\0 结束

int main() {
	char arr[] = "hello ruarua";
	printf("%u\n", strlen(arr));
	return 0;
}

strlen模拟

//方案1.计数器
size_t my_strlen(const char* str){
	int count = 0;
	while (*str != '\0') {
		count++;
		str++;
	}
	return count;
}
//方案2.指针-指针
size_t my_strlen(const char* str) {
	char* end = str;
	while (*end != '\0')
		end++;
	return end - str;
}
//方案3.递归
size_t my_strlen(const char* str) {
	if (*str == 0)
		return 0;
	else
		return 1 + my_strlen(str + 1);
}

int main() {
	int sz = my_strlen("ruarua");
	printf("%u\n", sz);//%u unsigned int
	return 0;
}

11.2长度不受限制的字符串函数

strcpy

Copy a string.
char *strcpy( char *strDestination, const char *strSource );

源字符串必须以\0结束,\0会拷贝到目标空间。
目标空间必须足够大,以确保能存放源字符串。
目标空间必须可修改。

int main() {
	char arr1[20] = { 0 };
	char arr2[] = "hello ruarua";
	//char arr2[] = {'r','u','a'};//没有'\0' err
	strcpy(arr1, arr2);
	printf("%s\n", arr1);
	return 0;
}

模拟strcpy

#include <assert.h>
char* my_strcpy(char* dest, const char* src) {
	assert(dest != NULL);
	assert(src != NULL);
	char* ret = dest;
	while (*src != '\0') {
		*dest = *src;
		dest++;
		src++;
	}
	*dest = *src;//copy '\0'
	return ret;
}
//简化-->
char* my_strcpy(char* dest, const char* src) {
	assert(dest != NULL);
	assert(src != NULL);
	char* ret = dest;
	while (*dest++ = *src++) {
		;
	}
	return ret;
}

int main() {
	char arr1[20] = { 0 };
	char arr2[] = "hello ruarua";
	my_strcpy(arr1, arr2);
	printf("%s\n", arr1);
	return 0;
}


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

相关文章:

  • js的简单介绍
  • 算法-回溯篇03-电话号码的字母组合
  • codewave初识
  • 一文讲清楚 MySQL 事务隔离级别和实现原理
  • Linux查看TP6 command定时任务并重启
  • CSS - 妙用Sass
  • shell脚本编程实践第6天
  • 高性能采集服务上线回顾
  • React 各模块相关全面面试及答案解析
  • 毓恬冠佳即将登陆资本市场,深耕汽车天窗领域,引领行业创新发展
  • [MySQL初阶]MySQL(1)MySQL的理解、库的操作、表的操作
  • MySQL深分页如何优化?
  • IDEA 2025最新版2024.3.3软件安装、插件安装、语言设置
  • c语言中return 数字代表的含义
  • 探秘基带算法:从原理到5G时代的通信变革【一】引言
  • 第三百七十二节 JavaFX教程 - JavaFX HTMLEditor
  • 【HDLbits--FSM续(二)】
  • 搭建iOS逆向开发环境 (下) - 越狱设备与高级工具配置
  • 蓝桥杯4T平台(串口控制LD状态)
  • 【Java项目】基于vue的地方美食分享系统