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

时间:2023-01-07 15:20:38
#include <stdio.h>
#include <stdlib.h>
#include <string.h>


int main()
{
	// 1.memset,设置字符串的内容。一般我们创建一个字符数组,都会设置为0
	char s[100];
	memset(s, 0, 100); // 将s的内容设置为0,长度为100
	
	
	// 2.strcat:追加,将字符数组的内容追加到另一个字符数组当中去
	char *s1 = "hello";
	char s2[] = "world";
	strcat(s, s1);
	strcat(s, "     ");
	strcat(s, s2);
	printf("s = %s\n", s);  // hello     world
	
	
	// 3.strncat:和strcat类似,不过在追加的同时可以指定个数
	memset(s, 0, 100); // 清空s的内容
	strncat(s, "hello world", 3); //只追加三个字符,从头开始追加3个
	printf("s = %s\n", s);  // s = hel
	
	
	// 4.strlen:计算字符串的长度
	printf("%d\n", strlen(s)); // 3 
	
	
	// 5.sprintf:按照指定格式转化字符串,和golang比较类似
	memset(s, 0, 100);
	sprintf(s, "%d %s--%c", 10, "mashiro", 'u');
	puts(s); // 10 mashiro--u
	
	
	// 6.字符串转化成其他格式
	memset(s, 0, 100);
	sprintf(s, "%d", 520);
	printf("%d\n", atoi(s)); // 520 
	printf("%f\n", atof(s)); // 520.000000
	
	
	// 7.strcmp:比较两个字符串的内容是否相等,相等返回0,否则返回1。而==则是比较两个地址,相等返回1,否则返回0
	char *str1 = "mashiro";
	char *str2 = "mashiro";
	char str3[] = "mashiro";
	printf("%d\n", str1 == str2); // 1 
	printf("%d\n", str1 == str3); // 0 
	
	printf("%d\n", strcmp(str1, str2)); // 0 
	printf("%d\n", strcmp(str1, str3)); // 0 
	
	
	// 8.strchr:查找某个字符出现的位置,然后匹配到结尾
	char *str = "hello world";
	puts(strchr(str, 'o')); // o world
	// 9.strrstr:反向查找某个字符串出现的位置,然后匹配到结尾
	puts(strrchr(str, 'o')); // orld
	
	
	// 9.strstr:查找字符串出现的位置,然后匹配到结尾
	char *string = "i am loli kon, loli kon";
	puts(strstr(string, "loli")); // loli kon, loli kon
	// 10.strrstr:反向字符串出现的位置,然后匹配到结尾。但是遗憾的是,只是在头文件里面有声明,却没有实现
	//puts(strrstr(string, "loli")); 
	
	
	// 11.strcpy:将字符数组拷贝到另一个字符数组中
	char string1[100];
	char *string2 = "satori world";
	char *string3 = "mashiro hello";
	strcpy(string1, string2);
	puts(string1); // satori world
	strcpy(string1, string3); 
	puts(string1);  // mashiro hello
	
	//可以看到strcpy和strcat类似,但是后者是追加
	
	// 12.strncpy:拷贝的时候指定个数
	strncpy(string1, string2, 4);
	puts(string1); // mashiro hello
	puts(string1); // satoiro hello
	//之前的内容没有情况,而是覆盖,所以是sato覆盖了mashiro hello的前4个字符
	
	// 13.从指定位置截取到指定位置
	char *string4 = "my name is van";
	//我想截取索引4到9的内容,在现在的高级语言的当中,如python golang,可以采用切片的方式[4: 9]
	//但是c不支持
	char *string5 = string4 + 4;	//表示指针移动4个单位,此时string5的首地址和string4的索引为4的元素的地址是一样,由于数组是一片连续的存储空间,所以string4 + 4等价于string4[4: ](如Python)
	puts(string5); // ame is van
	//然后在此基础之上,再截取5个就可以了
	char string6[10];
	strncpy(string6, string5, 5); 
	puts(string6); // ame i
		
	return 0;
}