超佳出品
目录
重点介绍处理 字符和字符串 的库函数的使用和注意事项
strlen,是字符串长度的函数
返回类型为 size_t 及无符号整型unsigned int 因为字符串长度必定都为正数,不可能出现负数,所以将返回值设置为无符号数会更加合适。
参数为char *类型的指针 要求字符串的长度,应该将字符串的首地址传过去,所以参数为char*
strlen返回类型为无符号整型,所以在比较两个字符串长度的时候,要格外注意!!
Copy a string,显而易见,拷贝字符串
返回类型char *指针,参数为目的字符串的地址,源字符串的地址
及(源字符串要拷贝到目的字符串中)
1.源字符串中必须要有斜杠零,当拷贝过程中,遇到斜杠零会停止拷贝!
Append a string. append增补,追加
追加字符串
返回类型 char *,返回目的字符串的地址
参数,目的字符串地址和源字符串地址,类型都为char *。
1.source字符串 追加在 dest字符串中,在目的字符串斜杠零位置开始追加,追加结束后,会自动带一个斜杠零。
2.目的字符串空间要大,足够追加!
3.源字符串中,必须要有斜杠零。
4.你是不是有自己追加自己的这种想法?当然不行!
追加过程中,会将源字符串中的斜杠零覆盖掉,导致字符串中没有斜杠零,即没有停止的位置,会一直死循环下去!
compare string,比较字符串
返回类型为int
参数为 字符串1 和 字符串2 的地址,类型为char*
举例一:
举例二:
是不是看出一些眉目?比较字符串当然不是看字符串的长度!比较的是每一对字符的大小,ASCII码值的大小
第一个例子:
第一对相等'a'= 'a',第二对 'a'< 'b' ,所以字符串2大于字符串1,后面的无需比较。
第二个例子明白了吧!
多增加了一个字节个数,即拷贝几个字节,更加有了限制
这样会更多考虑源字符串和目的字符串的空间大小,更加的严谨!!
多增加了一个字节个数,即追加几个字节,更加有了限制
这样会更多考虑源字符串和目的字符串的空间大小,更加的严谨!!
多增加了一个字节个数,即比较几个字节,更加有了限制
这样会更多考虑源字符串和目的字符串的空间大小,更加的严谨!!
代码如下(示例):
法一:计数器方式
- #include
- #include
- int my_strlen(char* p)
- {
- assert(str); //防止str为空指针
- int count = 0;
- while (*p++)
- {
- count++;
- }
- return count;
- }
- int main()
- {
- char arr[] = "abcdef";
- int ret = my_strlen(arr);
- printf("%d", ret);
- return 0;
- }
法二:递归,不创建临时变量
- #include
- #include
- int my_strlen(char *str)
- {
- if (*str== '\0')
- {
- return 0;
- }
- else
- {
- return my_strlen(str+1) + 1;
- }
- }
- int main()
- {
- char arr[] = "abcdef";
- int ret = my_strlen(arr);
- printf("%d", ret);
- }
法三:指针减指针
- #include
- #include
- int my_strlen(char* str)
- {
- char* p = str;
- while (*p!= '\0')
- {
- p++;
- }
- return p - str;
- }
- int main()
- {
- char arr[] = "abcdef";
- int ret = my_strlen(arr);
- printf("%d", ret);
- }
代码如下(示例):
- #include
- #include
- char * my_strcpy(char* dest, const char* src)
- {
- assert(dest && src);
- char* p = dest;
- while (*dest++ = *src++);
- return p;
- }
- int main()
- {
- char arr1[] = "aaaaaaaaa";
- char arr2[] = "bbbbbbbb";
- my_strcpy(arr1,arr2);
- printf("%s", arr1);
- }
代码如下(示例):
先找斜杠零,再拷贝.
- #include
- #include
- char* my_strcat(char* dest,const char* src)
- {
- char* p = dest;
- assert(dest && src);
- while (*dest)
- {
- dest++;
- }
- while (*dest++ = *src++);
- return p;
- }
- int main()
- {
- char arr1[20] = "aaaaaa";
- char arr2[] = "bbbbbbbb";
- my_strcat(arr1,arr2);
- printf("%s", arr1);
- return 0;
- }
代码如下(示例):
- #include
- #include
- int my_strcmp(const char* str1, const char* str2)
- {
- assert(str1 && str2);
- //法一
- while (*str1)
- {
- while (*str1 != *str2)
- {
- return *str1 - *str2;
- }
- str1++;
- str2++;
- }
- return 0;
- //法二
- while (*str1 == *str2)
- {
- if (*str1=='\0')
- return 0;
- str1++;
- str2++;
- }
- return *str1 - *str2;
- }
- int main()
- {
- char arr1[] = "abddd";
- char arr2[] = "abc";
- int ret=my_strcmp(arr1,arr2);
- if (ret > 0)
- printf("str1大\n");
- else if (ret < 0)
- printf("str2大\n");
- else
- printf("一样大\n");
- return 0;
- }
- void my_strncat(char* dest, char* src, int n)
- {
- while (*dest)
- {
- dest++;
- }
- while (n--)
- {
- *dest++= *src++;
- }
- *dest = '\0';
- }
- int main()
- {
- char arr1[6] = "aa";
- char arr2[] = "bbbbb";
- my_strncat(arr1, arr2,3);
- printf("%s", arr1);
- }
在使用字符串函数的时候,要注意的是函数的返回值和参数的使用,以及源字符串和目的字符串的空间大小!
我们下期再见!