C语言中操作字符串的函数

本文详细介绍了C语言中字符串处理的六个核心函数:strlen、strcmp、strcpy、strcat、strchr和strstr。通过实例展示了这些函数的使用方法和运行结果,帮助理解字符串操作的基本原理。
摘要由CSDN通过智能技术生成

一、函数表

函数名函数功能
strlensize_t strlen(const char* s);返回字符串 s 的长度(不包括结尾的0)
strcmpint strcmp(const char* s1, const char* s2);比较两个字符串,返回:如果 s1 == s2,返回 0;如果 s1<s2 则返回小于 0 (如 -1);如果 s1>s2 则返回大于 0 (如 1)
strcpychar* strcpy(char* restrict dst, const char* reestrict src)把字符串 src 复制拷贝到字符串 dst,返回 dst,restrict 表明 src 和 dst 不能重叠
strcatchar* stract(char* restrict s1, const char* reestrict s2)把字符串 s2 拷贝到字符串 s1 的后面,连接成一个长的字符串,返回 s1
strchrchar* strchr(const char* s, int c)返回一个指针,指向字符串 s1 中字符 ch 的第一次出现的位置
strstrchar* strstr(const char* s1, const char* s2)返回一个指针,指向字符串 s1 中字符串 s2 的第一次出现的位置

二、strlen

实例

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

//自定义 strlen()函数
size_t mylen(const char* s)
{
	int idx = 0;
	while (s[idx] != '\0') {
		idx++;
	}
	return idx;
}

int main()
{
	char a[] = "Hello";
	printf("mylen=%llu\n", mylen(a));
	printf("strlen=%llu\n", strlen(a));// {'H', 'e', 'l', 'l', 'o'};
	printf("sizeof=%llu\n", sizeof(a));// {'H', 'e', 'l', 'l', 'o','\0'};

	return 0;
}

运行结果

在这里插入图片描述

三、strcmp

实例

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

//自定义 strcmp()函数
int mycmp1(const char* s1, const char* s2)
{
	int idx = 0;
	while (1) {
		if (s1[idx] != s2[idx]) {
			break;
		}
		else if (s1[idx] == '\0') {
			break;
		}
		idx++;
	}
	return s1[idx] - s2[idx];
}
int mycmp2(const char* s1, const char* s2)
{
	int idx = 0;
	while (s1[idx] == s2[idx] && s1[idx] != 0) {
		idx++;
	}
	return s1[idx] - s2[idx];
}
int mycmp3(const char* s1, const char* s2)
{
	int idx = 0;
	while (*s1 == *s2 && *s1 != 0) {
		s1++;
		s2++;
	}
	return *s1 - *s2;
}

int main()
{
	char s1[] = "abc";
	char s2[] = "abc";
	char s3[] = "abc ";
	char s4[] = "bbc";
	char s5[] = "Abc";

	printf("mycmp1=%d\n", mycmp1(s1, s2));
	printf("mycmp2=%d\n", mycmp2(s1, s3));
	printf("mycmp3=%d\n", mycmp3(s1, s4));
	printf("mycmp3=%d\n", mycmp3(s1, s5));

	printf("strlen=%d\n", strcmp(s1, s2));
	printf("strlen=%d\n", strcmp(s1, s3));
	printf("strlen=%d\n", strcmp(s1, s4));
	printf("strlen=%d\n", strcmp(s1, s5));

	return 0;
}

运行结果

VS编辑器的原因,库函数 strlen 的结果只有 0, -1, 1 三种结果
在这里插入图片描述

四、strcpy

// 复制一个字符串
char* dst = (char*)malloc(strlen(src)+1);
strcpy(dst,src);
// strlen 查 src 大小 +1 (+1 的原因是加上字符串最后的 ‘\0’, strlen 读取的长度不包括 ‘\0’), 再 malloc 分配空间给 dst, 这样 dst 的空间正好等于 src, 然后再执行 strcpy 复制操作

实例

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

//自定义 strcpy()函数
char* mycpy1(char* dst, const char* src)
{
	int idx = 0;
	while (src[idx] != '\0') {
		dst[idx] = src[idx];
		idx++;
	}
	dst[idx] = '\0';
	return dst;
}
char* mycpy2(char* dst, const char* src)
{
	char* ret = dst;
	while (*src) {
		*dst++ = *src++;
	}
	*dst = '\0';
	return ret;
}

int main()
{
	char s1[] = "abc";
	char s2[] = "def";
	char s3[] = "ghi";
	char s4[] = "jkl";
	printf("s1=%s\n", s1);
	strcpy(s1, s2);
	printf("s1=%s\n", s1);
	mycpy1(s1, s3);
	printf("s1=%s\n", s1);
	mycpy2(s1, s4);
	printf("s1=%s\n", s1);

	return 0;
}

运行结果

在这里插入图片描述

五、stract

实例

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

int main()
{
	char s1[10] = "abc";
	char s2[] = "def";
	printf("s1=%s\n", s1);
	strcat(s1, s2);
	printf("s1=%s\n", s1);

	return 0;
}

运行结果

在这里插入图片描述

六、strchr

实例

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

int main()
{
	char s1[10] = "abcdebcde";
	printf("%p\n", s1);
	printf("%p\n", s1 + 1);
	char* p = strchr(s1, 'b');
	printf("%s\n", p);
	printf("%p\n", p);

	return 0;
}

运行结果

在这里插入图片描述

七、strstr

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Akalaka小鑫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值