strcat函数:
strcat函数介绍:
用处:向一个字符串,追加另外一个字符串。
参数:第一个为原字符串,第二个为要追加的字符串。
返回值:为char*,为原字符串的首字符的地址(指针)。
头文件:#include<string.h>
strcat函数注意点:
目标空间必须有足够的大,能容纳下源字符串的内容。
目标空间必须可修改。
strcat函数的使用:
例子代码:
int main() { char p1[20] = "dfaw"; char p2[20] = "sqqqq"; strcat(p1, p2); printf("%s", p1); return 0; }
运行结果:
strcat函数模拟实现:
原理:
先找原字符串的‘\0’的位置,从这个位置开始将要追加的字符串的字符一个个追加,注意:最后还是要有‘\0’的。
模拟实现:
#include<stdlib.h> #include<assert.h> char* my_strcat(char* dest, const char* src) { char* start = dest; assert(dest != NULL && src != NULL); while (*dest != '\0') dest++; while (*src != '\0') { *dest = *src; dest++; src++; } *dest = '\0'; return start; } int main() {//模拟实现strcat函数 char a[20] = "hellow"; char b[10] = " word !"; char* c; c = my_strcat(a, b); printf("%s\n", a); system("pause"); return 0; }
运行结果:
strcmp函数:
strcmp函数介绍:
用处:比较两个字符串的大小。
参数:两个字符串指针。
返回值:为int类型,有三种可能,一种为0,一种为大于0的数,一种为小于0的数。
头文件:#include<string.h>
strcmp函数注意点(返回值):
strcmp函数要注意的是就它的返回值。
我们在上面说过,strcmp的返回值有三种可能。
标准规定:
- 第一个字符串大于第二个字符串,则返回大于0的数字
- 第一个字符串等于第二个字符串,则返回0
- 第一个字符串小于第二个字符串,则返回小于0的数字
我们如何两个字符串如何比较:
两个字符串如何比较呢?
- 第一个字符串的第一个字符与另外一个字符串的第一个字符比较ASCII码值,如果第一个大于第二个,就返回大于0,反之,就返回小于0.
- 如果第一个字符串的第一个和另外一个字符串的第一个字符相等,就比较两者的第二个字符,以此类推,只有每一个字符都相等才返回0.
strcmp函数的使用:
例子代码:
int main() { char p1[20] = "asjkd"; char p2[20] = "ksd"; int n=strcmp(p1, p2); if (n == 0) printf("两个相等\n"); if (n > 0) printf("p1大\n"); if(n<0) printf("p2大\n"); return 0; }
运行结果:
strcmp函数模拟实现:
原理:
将两者的字符串的每一个字符进行比较,如果不同,就返回结果,如果相同,就进行两者下一个字符的比较。当每一个字符都相等,才判断为两个字符串相等。
模拟实现:
int my_strcmp(char* ch1, char* ch2) { if (ch1 != ch2) { if (ch1 > ch2) return 1; else return 2; } ch1++; ch2++; } int main() {//strcmp函数的模拟实现 char* ch1 = "abcdefg"; char* ch2 = 'acdw'; int a=my_strcmp(ch1, ch2); if (a == 1) printf("ch1大"); if (a == 2) printf("ch2大"); return 0; }
运行结果:
strncpy函数:
strncpy函数介绍:
用处:这个就是strcpy函数的加强版,我们可以控制要复制的字符个数。还是为字符串复制函数。
参数:第一个为目标字符串的地址(指针),第二个为要复制的字符串的首字符的地址(指针),第三个为我们需要复制字符的个数。
返回值:返回值为目标字符串的地址。
头文件:#include<string.h>
strncpy函数注意点:
strncpy函数是拷贝num个字符从源字符串到目标空间。
如果源字符串的长度小于num,则拷贝完源字符串之后,在目标的后边追加0,直到num个。
strncpy函数的使用:
例子代码:
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<string.h> int main() { char p[10]="sdafwa"; char a[12] = "sdghj"; int num = 3; strncpy(p, a, num); printf("%s", p); return 0; }
运行结果:
strncpy函数的模拟实现:
原理:
利用循环,然后将限制条件设为num,让它只复制num个字符就好。
模拟实现:
char* my_strncpy(char* goal, char* copy, int num) { assert(goal); assert(copy); int i = 0; for (int i = 0; i < num; i++) { *(goal + i) = *(copy + i); } return goal; } int main() {//模拟实现strncpy函数 char* goal[20];//目标字符串 scanf("%s", goal); printf("\n"); char* copy[20];//要复制的字符串 scanf("%s", copy); printf("\n"); int num; scanf("%d", &num); char*p=my_strncpy(goal, copy, num); printf("%s", p); return 0; }
运行结果:
strncat函数:
strncat函数介绍:
用处:这个也是strcat函数的加强版,可以控制想要的个数来追加字符串。
参数:第一个为目标字符串的地址(指针),第二个为要追加的字符串,第三个为你想要追加字符的个数。
返回值:为char*类型,是目标字符串的地址。
头文件:#include<string.h>
strncat函数的使用:
例子代码:
int main() {//strncat函数的使用 char p1[20]="dawff"; char p2[10] = "siiiii"; int num = 5; strncat(p1, p2, num); printf("%s", p1); return 0; }
运行结果:
strncat函数模拟实现:
原理:
找到'\0'的位置,然后利用循环将追加的字符个数设为循环的判断条件,让它只追加num个字符。
模拟实现:
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include<string.h> #include<assert.h> #include<math.h> #define Tot 20 #define NUM 10 char* my_strncat(char* address, char* add, int num) { assert(address);//断言防止错误 assert(add); int len = (int)strlen(address); int remaining = Tot - len;//剩余空间 char* p; int sz = (int)strlen(add);//追加函数大小 if (sz >=num) { if (num < remaining) { p = address + len; int i; for (int i = 0; i < num; i++) { *(p + i) = *(add+i); } *(p + num) = '\0'; return address; } else return NULL; } else return NULL; } int main() {//模拟实现strncat,追加n个字符的函数 char arr[Tot];//原字符串 printf("原字符串:"); scanf("%s", arr); char add_char[Tot];//追加字符串 printf("\n追加的字符串:"); scanf("%s", add_char); int num;//追加的字符个数 printf("\n追加的字符个数:"); scanf("%d", &num); char* arr2=my_strncat(arr,add_char,num); if (arr2 == NULL) { printf("追加的字符串过大,无法追加\n"); } else printf("追加后的字符串:%s", arr2); return 0; }
运行结果:
strncmp函数:
strncmp函数介绍:
用处:这个也是strcmp函数的加强版。不过它是控制最多比较几个字符。
参数:第一个参数是第一个字符串,第二个参数是第二个字符串,第三个参数是我们想要的最多比较几个字符的个数。
返回值: 为int类型,有三种可能,一种为0,一种为大于0的数,一种为小于0的数。
头文件:#include<string.h>
strncmp函数注意点:
strncmp的注意点与strcmp函数一样都是为返回值,并且一样的。
我们在上面说过,strncmp的返回值有三种可能。
标准规定:
- 第一个字符串大于第二个字符串,则返回大于0的数字
- 第一个字符串等于第二个字符串,则返回0
- 第一个字符串小于第二个字符串,则返回小于0的数字
strncmp函数的使用:
例子代码:
int main() { char p1[10] = "afasa"; char p2[10] = "afcqqqqq"; int num = 2; int a=strncmp(p1, p2, num); if (a == 0) { printf("两者相等"); } if (a > 0) { printf("p1大"); } if (a < 0) { printf("p2大"); } return 0; }
运行结果:
strncmp函数的模拟实现:
原理:
每次循环判断一次大小,如果判断出来就返回,当num次后还没有比出大小,就返回0.
模拟实现:
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<string.h> #include<assert.h> #define NUM1 20 #define NUM2 10 int my_strncmp(char* str1, char* str2, int num) { assert(str1); assert(str2); int i; int flag = 0; for (int i = 0; i < num; i++) { if (*str1 != *str2) { if (*str1 > *str2) { flag++; return flag; } else { flag--; return flag; } } } return flag; } int main() { char str1[NUM1];//第一个字符串 printf("str1="); scanf("%s", str1); printf("\n"); char str2[NUM2];//第二个字符串 printf("str2="); scanf("%s", str2); printf("\n"); int num;//需要比较的字符个数 printf("要比较的字符个数num="); scanf("%d", &num); int p;//用来判断返回值 p=my_strncmp(str1, str2, num); if(p == 0) { printf("两者相等"); } if (p > 0) { printf("str1大"); } if (p < 0) { printf("str2大"); } return 0; }
运行结果: