字符函数和字符串函数
1.前言
2.求字符串长度
2.1.strlen
size_t strlen ( const char * str );
//typedef unsigned int size_t;
#include<stdio.h>
#include<string.h>
int main()
{
char arr[] = "abcdef";
size_t len = strlen(arr);
printf("%u\n", len);//6
return 0;
}
注:
#include <stdio.h>
int main()
{
const char* str1 = "abcdef";
const char* str2 = "bbb";
if (strlen(str2) - strlen(str1) > 0)
{
printf("str2>str1\n");
}
else
{
printf("srt1>str2\n");
}
return 0;
}
因为strlen函数的返回值是无符号整型,无符号整型之间运算的结果还是无符号整型,即恒大于零。
故if (strlen(str2) - strlen(str1) > 0)应该改为if(strlen(str2)>strlen(str1))。
2.1.1.计算器方法模拟实现strlen函数
#include<stdio.h>
#include<assert.h>
//模拟实现strlen函数
size_t my_strlen(const char* str)
{
assert(str);
size_t count = 0;
while (*str++ != '\0')
count++;
return count;
}
int main()
{
char arr[] = "abcdef";
size_t n = my_strlen(arr);
printf("%u\n", n);
return 0;
}
2.1.2.指针-指针模拟实现strlen函数
#include<stdio.h>
#include<assert.h>
size_t my_strlen(const char* str)
{
assert(str);
char* end = str;
while (*end++ != '\0');
size_t n = (size_t)(end - str) - 1;
return n;
}
int main()
{
char arr[] = "abcde";
size_t n = my_strlen(arr);
printf("%u\n", n);
return 0;
}
2.1.3.递归模拟实现strlen函数
#include<stdio.h>
#include<assert.h>
size_t my_strlen(const char* str)
{
if (*str == '\0')
return 0;
else
return 1 + my_strlen(str + 1);
}
int main()
{
char arr[] = "abcdef";
size_t n = my_strlen(arr);
printf("%u\n", n);
return 0;
}
3.长度不受限制的字符串函数
3.1.strcpy
char* strcpy(char * destination, const char * source );
#include<stdio.h>
#include<string.h>
int main()
{
char arr1[] = "abcd";
char arr2[20] = "xxxxxxxxx";
//arr2="abcd";//error//arr2数组是地址,地址是一个常量值,不能被赋值
strcpy(arr2, arr1);
printf("%s\n", arr2);
return 0;
}
模拟实现strcpy函数
#include<stdio.h>
#include<assert.h>
char* my_strcpy(char* dest, const char* src)
{
assert(dest && src);
char* str = dest;
while (*dest++ = *src++);
return str;
}
int main()
{
char arr1[] = "abcdef";
char arr2[20] = { '\0' };
my_strcpy(arr2, arr1);
printf("%s\n", arr2);
return 0;
}
3.2.strcat
char * strcat ( char * destination, const char * source );
#include<stdio.h>
#include<string.h>
int main()
{
char arr[20] = "abcd";
strcat(arr, arr);
printf("%s\n", arr);
return 0;
}
#include<stdio.h>
#include<string.h>
int main()
{
char arr[20] = "hello ";
strcat(arr, "world");
printf("%s\n", arr);
return 0;
}
模拟实现strcat函数
#include<stdio.h>
#include<assert.h>
char* my_strcat(char* dest, const char* src)
{
assert(dest && src);
char* str = dest;
while (*dest != '\0')
{
dest++;
}
while (*dest++ = *src++);
return str;
}
int main()
{
char arr[20] = "hello ";
my_strcat(arr, "world");
printf("%s\n", arr);
return 0;
}
3.2.strcmp
int strcmp ( const char * str1, const char * str2 );
strcmp比较的是两字符的ASCI码值
#include<stdio.h>
#include<string.h>
int main()
{
char arr1[] = "abcdef";
char arr2[] = "azcd";
if (strcmp(arr1, arr2) > 0)
printf("arr1>arr2\n");
else
printf("arr1<arr2\n");
return 0;
}
模拟实现strcmp函数
#include<stdio.h>
#include<assert.h>
//int strcmp( const char *string1, const char *string2 );
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 arr1[20] = { "zhangsan" };
char arr2[] = { "zhangsanfeng" };
//比较两字符串是否相等
int ret = my_strcmp(arr1, arr2);
printf("%d\n", ret);
return;
}
4.最后
那么这一次的字符函数和字符串函数的笔记就到这里啦。小沐会持续更新字符函数和字符串函数。