1.strcmp
使用说明
#include<string.h>int strcmp ( const char * str1, const char * str2 );比较两个字符串
将 C 字符串 str1 与 C 字符串 str2 进行比较。
比较的是ASCII编码
此函数开始比较每个字符串的第一个字符。如果它们彼此相等,则继续以下对,直到字符不同或达到终止空字符。
若str1> str2,则返回大于0的数;
若str1>==str2,则返回等于0的数;
若str1< str2,则返回小于0的数;
例如:比较字符串”abc”与”abq”,代码如下:
#include<string.h>#include<stdio.h>int main(){ char source[50] = "abc"; char str[20] = "abq"; int ret = strcmp(source, str); printf("%d ", ret); return 0;}模拟实现
#include<stdio.h>#include<assert.h>int my_strcmp(const char* a, const char* b){ assert(a); assert(b); //断言以防空指针 while (*a == *b && *a && *b) { a++; b++; } //while循环直到*a与*b不相同或为'\0' return *a - *b; //返回的差值就是结果}
int main(){ char source[50] = "abc"; char str[20] = "abq"; int ret = my_strcmp(source, str); printf("%d ", ret);
return 0;}2.strlen
#include<string.h>size_t strlen ( const char * str );使用说明
获取字符串长度
返回 C 字符串 str 的长度。
C 字符串的长度由终止空字符确定:C 字符串的长度与字符串开头和终止空字符之间的字符数一样长(不包括终止空字符本身)
例如:求字符串“abcefghijklmn”的长度,代码如下:
#include<string.h>#include<stdio.h>int main(){ char str[20] = "abcefghijklmn"; int ret = strlen( str); printf("%d ", ret);
return 0;}模拟实现
#include<stdio.h>#include<assert.h>size_t my_strlen(const char* a){ assert(a); size_t count = 0; while (*a++) { count++; } //while循环直到*a为'\0',并在循环中记录count的值 return count;}
int main(){ char str[20] = "abcefghijklmn"; size_t ret = my_strlen(str); printf("%zd ", ret);
return 0;}3.strstr
#include<string.h>char *strstr(const char *haystack, const char *needle)使用说明
查找子字符串
返回指向 str1 中第一次出现的 str2 的指针,如果 str2 不是 str1 的一部分,则返回一个空指针。
匹配过程不包括终止空字符,但它到此为止。
例如:在”abbbbbccdef”字符串str1中查找”bbc”子字符串str2,代码如下:
#include<string.h>#include<stdio.h>int main(){ char* ret = strstr("abbbbbccdef","bbc"); printf("%s ", ret); return 0;}模拟实现
#include<stdio.h>#include<assert.h>char* my_strstr(const char* a, const char* b){ assert(a); assert(b); if (!*b) return a; //如果*b为空字符串则直接返回a char* n = a; while (*n) { char* m = n; char* tmp = b; while (*tmp==*m&&*tmp&&*m) { tmp++; m++; } //while循环, //当*tmp='\0'时,说明a中存在包含b的子字符 if (!*tmp) return n; else { n++; } } return NULL; //若程序未在前面返回就只能说明a中没有b的子字符}
int main(){ char* ret = my_strstr("abbbbbccdef","bbc"); printf("%s ", ret); return 0;}4.strcpy
#include<string.h>char * strcpy ( char * destination, const char * source );使用说明
将源指向的 C 字符串复制到目标指向的数组中,包括终止的 null 字符(并在该点停止)。
为避免溢出,目标指向的数组的大小应足够长,以包含与源相同的 C 字符串(包括终止空字符),并且不应在内存中与源重叠。
例如:将大小为13的字符”No possible”复制到初始空间为50的字符串中。例如:
#include<string.h>#include<stdio.h>int main(){ char destination[50] = "i love you"; char source[20] = "No possible"; char* ret = strcpy(destination, source); printf("%s ", ret); return 0;}模拟实现
#include<assert.h>#include<stdio.h>char* my_strcpy(char* a, const char* b){ assert(a); assert(b); char* ret = a; while (*a++ = *b++) { ; } //利用while循环复制*b return ret;}
int main(){ char destination[100] = "i love you"; char source[20] = "No possible..."; char* ret = my_strcpy(destination, source); printf("%s ", ret); return 0;}5.strcat
#include<string.h>char * strcat ( char * destination, const char * source )使用说明
连接字符串
将源字符串的副本追加到目标字符串。目标中的终止空字符被源的第一个字符覆盖,并且在目标中由两者串联形成的新字符串的末尾包含一个空字符。
目的地和来源不得重叠。
例如:我要连接字符串str1与str2,并且str1所占空间要大于str1与str2相加的有效字符+1,例如:
#include<stdio.h>#include<string.h>int main(){ char destination[100] = "i love you "; char source[20] = "No possible..."; char* ret = strcat(destination, source); printf("%s ", ret); return 0;}模拟实现
#include<stdio.h>#include<assert.h>char* my_strcat(char* a, const char* b){ assert(a); assert(b); char* ret = a; while (*a) a++; //找到a中的第一个'\0' while (*a++ = *b++) {} //利用while循环在a中第一个'\0'之后包括'\0'复制*b return ret;}
int main(){ char destination[100] = "i love you "; char source[20] = "No possible..."; char* ret = strcat(destination, source); printf("%s ", ret); return 0;}如果这篇文章对你有帮助,欢迎分享给更多人!
部分信息可能已经过时