C 语言 裁剪字符串

目录

一、思路

二、调用函数

三、例子

 

一、思路

给定字符串 string_buf[1024] = "12345678",把这个字符串分成 3 段 a, b, c 并分别截取 a, b, c, ab, ac, bc 这六种情况段字符串。

string_buf[1024] = "12345678"

"12"        "345"        "678"
 a            b            c 

截取通过内存拷贝来实现。

二、调用函数

memcpy()
memset()

void *memcpy(void *dest, const void *src, size_t n);
void *memset(void *s, int c, size_t n);

利用 strncpy( ) 也可以实现字符串裁剪,不过需要新建一个字符串数组存放这些数据,memset( ) 与 strncpy( ) 类似但有些区别。

另外 strtok( ) 函数也可以实现裁剪功能,不过是按照分隔符来裁剪的,本文不涉及这种情况。

三、实现

1⃣️ 分别截取 a, b, c 这三种情况有点类似,只以截取 b 为例子

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

int main(int argc, char** argv)
{
	char string_buf[1024] = "12345678";
	printf("%s\n", string_buf);
	//只要 b 不要 a c
	memcpy(string_buf, string_buf+2, sizeof(string_buf)-2);
	printf("%s\n", string_buf);
	memset(string_buf+3, 0, sizeof(string_buf)-3);
	printf("%s\n", string_buf);
	return 0;
}

结果如下:

$ gcc exam.c 
$ ./a.out 
12345678
345678
345

2⃣️截取 ab,不要 c

ab 字符串部分往后清零即可

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

int main(int argc, char** argv)
{
	char string_buf[1024] = "12345678";
	//划定 a 12, b 345, c 678 
	printf("%s\n", string_buf);
	//只要 a b,不要 c
	memset(string_buf + 5, 0, sizeof(string_buf) - 5);
	printf("%s\n", string_buf);
	return 0;
}

结果如下:

$ gcc exam.c 
$ ./a.out 
12345678
12345

3⃣️截取 bc,不要 a

bc 字符串往左移 a 字符串的长度,移动完毕后,bc 后的内容清零。

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

int main(int argc, char** argv)
{
	char string_buf[1024] = "12345678";
	//划定 a 12, b 345, c 678 
	printf("%s\n", string_buf);
	memcpy(string_buf, string_buf+2, sizeof(string_buf)-2);
	printf("%s\n", string_buf);
	memset(string_buf + 6, 0, sizeof(string_buf)-6);
	printf("%s\n", string_buf);
	return 0;
}

结果如下:

pi@raspberrypi:~/turfShare/mysqlFiles/test_project $ ./a.out 
12345678
345678
345678

4⃣️截取 ac,不要 b

只需要 c 左移 b 字符串的长度,左移完成后,ac 后的内容清零。

#include <stdio.h>
#include <string.h>
int main(int argc, char** argv)
{
	char string_buf[1024] = "12345678";
	//划定 a 12, b 345, c 678 
	printf("%s\n", string_buf);
	//只要 ac,不要 b
	memcpy(string_buf+2, string_buf+5, sizeof(string_buf)-3);
	printf("%s\n", string_buf);
	memset(string_buf + 5, 0, sizeof(string_buf)-5);
	printf("%s\n", string_buf);
	return 0;
}

结果如下:

$ gcc exam.c 
$ ./a.out 
12345678
12678
12678

结论:实现字符串的裁剪本质上是内存的拷贝

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值