赞
踩
C语言中是没有字符串这种类型,而我们通常叫字符串数组、它其实是连续的字符序列,最后以空字符'\0'作为终止符,一个字符串的长度就是所有字符的数量,但不包括终止符'\0'
-
- // 模拟实现strlen()函数 size_t strlen(const char * str) size_t 表示 unsigned int
- 1.计数器版本
- int my_strlen(char * str)
- {
- int count = 0;
- while (*str != '\0')
- {
- count++;
- str++;
- }
- return count;
- }
- 2.递归版本
- int my_strlen1(char* str)
- {
- if (*str != '\0')
- {
- return 1 + my_strlen1(str + 1);
- }
- else
- {
- return 0;
- }
- }
- 3.指针—指针
- int my_strlen2(char* str)
- {
- char *endstr = str;
- while (*str != '\0')
- {
- str++;
- }
- return str - str[0];
- }
-
- int main()
- {
- char str[] = "abcde";
- int num = 0;
- int num1 = 0;
- int num2 = 0;
- num = my_strlen(str);
- num1 = my_strlen1(str);
- num2 = my_strlen2(str);
- printf("%d\n", num); // 5
- printf("%d\n", num1); // 5
- printf("%d\n", num2); // 5
-
- return 0;
- }
-
-
将arr1复制到arr2
- // char * strcpy(char * destination, const char* source)
- my_strcpy(char*arr1, const char*arr2)
- {
- 断言
- assert(arr2 != NULL);
- while (*arr1 = *arr2)//( *arr1++ = *arr2++)
- {
- arr1++;
- arr2++;
- }
- }
- int main()
- {
- char arr1[] = "abcdef";
- char arr2[10] = {0};
- strcpy(arr1, arr2);
- my_strcpy(arr1, arr2);
- printf("%s", arr2);
- return 0;
- }
strcat(char * destination, const char* source) 字符串拼接,将str2的字符全部拼接到str1中
strncat(char * destination, const char* source,int count) 指定数量的字符拼接到arr1中
- // char * strcat(char * destination, const char* source)
- void my_strcat(char*str1, const char*str2)
- {
- assert(str1 && str2);
- while (*str1)
- {
- str++;
- }
- while ((*str1 = *str2) != '\0')
- {
- str1++;
- str2++;
- }
- }
-
- mystrncat(char* str1, char* str2, size_t count)
- {
- while (*str1++) // 让指针指向 \0
- {
- ;
- }
-
- str1--; // 让指针指向 \0 前一个字符
-
- while (count--)
- {
- if ((*str1++ = *str2++) == 0)
- {
- return (str1);
- }
- }
-
-
- // 当str2指定的几个字符不包括\0 例如 "abcd" 只追加3个字符 abc
- // 也就是说str2没追加到'\0',自动补'\0'
- *str1 = '\0';
-
- return (str1);
- }
- int main()
- {
- char str1[20] = "hello ";
- char str2[] = "world";
- //my_strcat(str1, str2);
- mystrncat(str1, str2, 3);
- printf("%s", str1);
- return 0;
- }
- // int strcmp(const char * str1, const char * str2)
- // return arr1 < arr2 返回 -1 比较第一个字符
- // return arr1 > arr2 返回 1
- // return arr1 = arr2 返回 0
- int my_strcmp(char* str1, char* str2)
- {
- while (*str1 == *str2)
- {
- if (*str1 == '\0')
- {
- return 0;
- }
- str1++;
- str2++;
-
- }
- if (*str1 > *str2)
- {
- return 1;
- }
- else {
- return -1;
- }
- return 0;
- }
-
- sys_strcmp(const char*str1, const char*str2)
- {
- int ret = 0;
- while ((ret = *(unsigned char* )str1 - *(unsigned char* )str2) == 0 && *str2) // ret 为正数 str1 > str2
- { // 满足 *str1 - *str2 = 0 字符相等, *str2 不等于'\0'
- ++str1,++str2;
- }
- return ((-ret) < 1 )-(ret < 1); // -ret < 0 如果ret 为正数 -ret 为负数 则 -ret < 0 为 真 即为 1
- }
- int main()
- {
- char str[] = "abcdc";
- char str2[] = "abcdc6d";
- //int a = my_strcmp(str, str2);
- int b = strcmp(str, str2);
- int c = sys_strcmp(str, str2);
- //printf("%d\n", a);
- //printf("%d\n", b);
- printf("%d\n", c);
- return 0;
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。