#include 「string.h」

    技术2024-12-17  13

    下面是自我测试

    | "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(); }
    Processed: 0.025, SQL: 9