赞
踩
目录
strcmp函数是用来比较两个字符串大小的函数,需要引用头文件<string.h>。
int strcmp ( const char * str1, const char * str2 );
strcmp比较两个字符串的大小,一个字符一个字符比较,按ASCLL码比较
标准规定:
第一个字符串大于第二个字符串,则返回大于0的数字
第一个字符串等于第二个字符串,则返回0
第一个字符串小于第二个字符串,则返回小于0的数字
- #include<stdio.h>
- #include<string.h>
- int main()
- {
- char* p1 = "abcdefgh";
- char* p2 = "abcdefgh";
- char* p3 = "abcde";
- char* p4 = "bcdef";
- printf("%d\n", strcmp(p1, p2));
- printf("%d\n", strcmp(p1, p3));
- printf("%d\n", strcmp(p3, p4));
- }
1.函数所接收的值只用于比较,不能被修改,因此要对参数进行const修饰,由于传入参数都不能为空,因此可以加用断言。
2. strcmp是比较字符串中对应位置上的字符大小(ASC II码值大小),如果相同,就比较下一对,直到不同或者都遇到'\0'。
3.若str1和str2解引用后不相等,则返回*str1-*str2。
- #include<stdio.h>
- #include<assert.h>
- int my_strcmp(const char* str1, const char* str2)
- {
- assert(str1 && str2);
- while (*str1 == *str2)
- {
- if (*str1 == '\0')
- {
- return 0;
- }
- str1++;
- str2++;
- }
- return(*str1 - *str2);
- }
- int main()
- {
- char* p1 = "abcdefgh";
- char* p2 = "abcdefgh";
- char* p3 = "abcc";
- char* p4 = "bcde";
- printf("%d\n", my_strcmp(p1, p2));
- printf("%d\n", my_strcmp(p1, p3));
- printf("%d\n", my_strcmp(p3, p4));
- }
strcat追加拷贝,追加到目标空间后面,目标空间必须足够大,能容纳下源字符串的内容。
char * strcat ( char * destination, const char * source );
- #include<stdio.h>
- #include<string.h>
- int main()
- {
- char str1[20] = "yes or";
- const char* str2 = " on";
- strcat(str1, str2);
- printf("%s\n", str1);
- return 0;
- }
1.目的在字符串dst的末尾接上src的开头。
2.因此首先让dst指向'\0',让src从'\0'开始赋值给dst
- #include<stdio.h>
- void MyStrcat(char* dst, const char* src)
- {
-
- while (*dst != '\0')
- {
- ++dst;
- }
-
- while (*dst = *src)
- {
- ++dst;
- ++src;
- }
- *dst = '\0';
- }
- int main()
- {
- char p1[20] = "yes or";
- const char* p2 = " no";
- MyStrcat(p1, p2);
- printf("%s\n", p1);
- return 0;
- }
strcpy是覆盖拷贝,将source全覆盖拷贝到destination,会把’\0’也拷过去,且必须考虑destination的空间够不够(destination的空间必须>=source的空间)
char * strcpy ( char * destination, const char * source );
- #include<stdio.h>
- #include<string.h>
- int main()
- {
- char p1[] = "yes or no";
- char* p2 = "yes";
- printf("%s\n", p1);
- strcpy(p1, p2);
- printf("%s\n", p1);
- return 0;
- }
我们目的是将source覆盖拷贝到destination,那么我们可以从头开始将source的值,赋给destination,赋值结束后只需要给destination后一个位置加上'\0'就完成了。
- #include<stdio.h>
- void my_strcpy(char* dst, const char* src)
- {
- while (*src)
- {
- *dst = *src;
- ++src;
- ++dst;
- }
- *dst = '\0';
- }
- int main()
- {
- char p1[] = "yes or no";
- const char* p2 = "yes";
- printf("%s\n", p1);
- my_strcpy(p1, p2);
- printf("%s\n", p1);
- return 0;
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。