#include 「string.h」

下面是自我测试

  • | "hello word"字符串,我只要"word"怎么实现
  • | “hello wang"与"hello li”,我想要比较这两个字符串前面4个字符是不是一样的,怎么弄
  • | 我想把"hello word"的一段"hello"复制到另一个字符数组怎么弄
  • | 我想把"hello wang"的"hello"替换成"hi"怎么实现
  • | 字符串连接函数
  • | str2的前N个字符连接到str1后面
  • | 比较两个字符串的ASCLL码大小
  • | 将str2复制到str1里面
  • | 将str2前N个字符复制到str1里面
  • | 返回str1与str2第一个匹配的字符的下标
  • | 返回字符串长度
  • | 比较str2是不是str1的子字符串
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

/*
	1:memchr() 
	{
		1:void *memchr(const void *str, int c, size_t n)
		2:str=字符串的前 n 个字节
		3:c = 所需寻找的字符
		4:n = 查找的长度
		返回值:第一次出现字符 c的地址
		作用:截取字符串
	}

	2:memcmp()
	{
		1:int memcmp(const void *str1, const void *str2, size_t n)) 
		2:把str1和str2的前n个字节进行比较
		返回值:与strcmp类似
	}	

	3:memcpy()
	{
		1: void *memcpy(void *str1, const void *str2, size_t n) 
		2: const类型str2复制前n个字符到str1  //注意str1最好是未赋值的空间.因为赋值后的空间就不能改了!
		作用:截取前N字节!
		//为保准str2的数据不被破坏,str2为const类型!
	}	

	4;memmove()效果与memcpy一致!
	{
		 1:void *memmove(void *str1, const void *str2, size_t n);
		 2:memmove()比memcpy()更安全

		 //注意:str1不能有内容,否则str1就是""的const类型,从而不能被写入数据!
	}	 

	5:memset()
	{
		1:void *memset(void *str, char c, size_t n)
		2:str的前n个字符都用字符c替换!

		//注意:汉字是2字节字符!
	}

	6:strcat()
	{
		1: char *strcat(char *str1, const char *str2)
		2: str2接在str1后面!
		//注意内存溢出
	}

	7:strncat()
	{
		1:char *strncat(char *str1, const char *str2, size_t n);
		2:将str2的前N个字节接在str1的后米
	}

	8:strchr()与memchr()的区别
	{
		1:memchar是指代大小不确定的空间
		2:strchar是指代大小已经知道的字符串
		
		3:char *strchr(const char *str, int c)
		4:返回str第一次出现字符c的地址!
	}

	9:strcmp  //注意比较的是ASCLL之和,小写字符的ASC > 大写字母ASC

	10:strcoll  //与strcmp的效果用法一致!
	
	11;strcpy(char * str1,const char* str2)  //将str2复制到str1;

	12;strncpy(char * str1,const char* str2,int n)  //将str2的前n字节复制到str1;
	
	13:strcspn()
	{
		参数一:char * str1;
		参数二:char * str2;

		返回值;返回与str1第一个匹配的字符的下标
	}

	14:strerror(errno)
	{
		printf("%s",strerror(errno)); //打印错误号对应的错误信息!
	}

	15:strlen() 以\0结尾返回字符串长度

		
	16:strpbrk(const char * str1,const char * str2)
	{
		返回值:第一个与str1匹配到的str2地址,然而strcspn是返回str1的匹配字符的地址

	}

	17:strrchr(char * str,char Eng)
	{
		返回值:返回str中最后一次出现Eng的地址;
	}
	
	18:strspn(const char *str1, const char *str2)
	{
		注意:
		const char *str1 --> 表示字符串
		char * str1 --> 可能表示字符串,可能表示字符

		返回值:str1中第一个匹配str2的字符的下标!
	}

	19:strstr(const char *str1, const char *str2)
	{
		如果str2是str1的子字符串,则返回子字符串第一次出现的地址!
		如果str2不是str1的子字符串,则返回一个空指针 = (NULL);
	}

	20:strtok(const char *str1, const char *str2)
	{
		根据str2作为划分界限,将str1切分划出一个小字符串!
		并将小字符串的地址作为返回值返回;
		此时原str1字符串不变
		如果需要在变化的基础上再分 --> strtok(NULL,str2)
		当返回值 == 空指针 == NULL时,表示str1不可再分!
	}

	注意:
		有指针指向的字符数组是const类型,不能
		没有指针指向的字符数组
*/

void Str_Text1()
{
	char *Str = "hello word!";

	char* Frist_Show;
	Frist_Show = memchr(Str, 'o', strlen(Str));

	printf("字符%c后面的字符串是%s",Frist_Show[0],Frist_Show);
}

void Str_Text2()
{
	char* Name1 = "yqj";
	char* Name2 = "zyj";

	int Sign = memcmp(Name1, Name2, 1);

	if (Sign >0)
	{
		printf("yqj的姓Y > zyj的姓Z");
	}
	else
	{
		printf("yqj的姓Y < zyj的姓Z");
	}
}

void Str_Text3()
{
	char Name1[10] = {NULL};
	char* Name2 = "zyj";
	memcpy(Name1, Name2, 2);
	printf("姓氏:%s", Name1);
}

void Str_Text4()
{
	char Name1[10];
	char* Name2 = "zyj";
	memcpy(Name1, Name2, strlen(Name2));
	//输出str1
	for (size_t i = 0; i < strlen(Name2); i++)
	{
		printf("%c", Name1[i]);
	}
}

void Str_Text5()
{
	char Name1[10] = "zyj";
	
	memset(Name1, 'A', 2);

	puts(Name1);
	
}


void Str_Text6()
{
	char Name1[20] = "zyj";
	char Name2[20] = "yqj";

	strcat(Name1, Name2);

	puts(Name1);

}


void Str_Text7()
{
	char Name1[20] = "zyj";
	char Name2[20] = "yqj";

	strncat(Name1, Name2,4);

	puts(Name1);

}


void Str_Text8()
{
	char Name1[20] = "hello word";

	char* p;

	p = strchr(Name1, ' ');

	printf("'%c'后续的字符串是%s",p[0],p);
}


void Str_Text9()
{
	char Name1[20] = "hello word";
	char Name2[20] = "Hello word";
	
	if (strcmp(Name1,Name2) == 1 )
	{
		printf("hello word > Hello word");
	}
	else
	{
		printf("hello word < Hello word");
	}

}

void Str_Text10()
{
	char Name1[20] = "hello word";
	char Name2[20] = "Hello word";

	if (strcoll(Name1, Name2) == 1)
	{
		printf("hello word > Hello word");
	}
	else
	{
		printf("hello word < Hello word");
	}
}

void Str_Text11()
{
	char Name[20];
	char Name1[20] = "hello word";

	strcpy(Name, Name1);

	printf("%s", Name);
}

void Str_Text12()
{
	char Name[20] = {NULL};
	char Name1[20] = "hello word";

	strncpy(Name, Name1,5);

	for (size_t i = 0; i < strlen(Name); i++)
	{
		printf("%c", Name[i]);
	}
}


void Str_Text13()
{
	char Name[20] = "Hello word";
	char Name1[20] = "hello word";

	int Sign = strcspn(Name, Name1);


	printf("第一个匹配到的字符下标是:%d --> 字符是:%c" ,Sign,Name[Sign]);
}


void Str_Text14()
{
	FILE* fp = NULL;
	fp = fopen("xxx.txt", "r");

	if (fp == NULL)
	{
		printf("ERROR:%s", strerror(errno));
	}

}

void Str_Text15()
{
	char* Engs = "zyj";
	printf("字符串长度:%d", strlen(Engs));
}


void Str_Text16()
{
	char* Engs1 = "abcdf4567";
	char* Engs2 = "lj4g";

	char *Eng;

	Eng = strpbrk(Engs1, Engs2);

	printf("匹配到的字符是%c", Eng[0]);
}

void Str_Text17()
{
	char* Engs = "www.baidu.com";

	char* p;

	p = strrchr(Engs,'.');

	printf("'%c'最后一次出现的位置后的字符串是:%s", p[0], p);

}

void Str_Text18()
{
	char* Engs1 = "HELLO WORD";
	char* Engs2 = "HELLO Word!";

	size_t Sub;

	Sub = strspn(Engs1, Engs2);

	printf("第一个未匹配到的字符是第%d个字符,对应的字符是%c",Sub,Engs1[Sub-1]);
}

void Str_Text19()
{
	char* Engs1 = "hello the word!";
	char* Engs2 = "then";

	char* p;

	p = strstr(Engs1,Engs2);

	printf("%s", p);

}

void Str_Text20()
{
	char Engs1[20]= "www.baidu.com";
	char Engs2[2] = ".";

	char* p = NULL;
	p = strtok(Engs1, Engs2);
	while (p!=NULL)
	{
		printf("\n%s", p);
		p = strtok(NULL, Engs2);
	}
}

void STRING_TEXT()
{
	//memchr()的使用方法
	//Str_Text1();

	//memcmp()的使用方法
	//Str_Text2();

	//memcpy()的使用方法
	//Str_Text3();

	//memmove()的使用方法
	//Str_Text4();

	//memset()的使用方法
	//Str_Text5();

	//strcat()使用方法
	//Str_Text6();

	//strncat()使用方法
	//Str_Text7();

	//strchr()使用方法
	//Str_Text8();

	//strcmp()使用方法
	//Str_Text9();

	//ctrcoll()使用方法
	//Str_Text10();

	//strcpy()使用方法
	//Str_Text11();
	
	//strncpy()使用方法
	//Str_Text12();

	//strcspn()使用方法
	//Str_Text13();

	//strerror(errno)使用方法
	//Str_Text14();

	//strlen()使用方法
	//Str_Text15();

	//strpbrk()使用方法
	//Str_Text16();

	//strrchr()使用方法
	//Str_Text17();

	//strspn()使用方法
	//Str_Text18();

	//strstr()使用方法
	//Str_Text19();

	//strtok()使用方法
	//Str_Text20();


}



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值