strlen的使用和模拟实现
strlen的使用
strlen函数可以求出字符串(除了’\0’)的长度。
头文件
#include<string.h>
声明
size_t strlen(const char*str)
参数
str—>需求长度的数组。
返回值
无符号整型
实例:
strlen的模拟实现
1.指针移动
#include<stdio.h>
//指针移动
int My_strlen(char* p)
{
int count = 0;
while (*p)
{
count++;
p++;
}
return count;
}
int main()
{
char arr[] = "abcdefghi";
printf("%d", My_strlen(arr));
return 0;
}
2.函数递归求解
//递归求解
#include<stdio.h>
int my_strlen(char* arr)
{
if(*arr == '\0')
return 0;
return my_strlen(arr+1)+1;
}
int main()
{
char arr[] = "abcdef*";
printf("%d",my_strlen(arr));
return 0;
}
3.指针相减
//指针相减
#include<stdio.h>
int my_strlen(char* arr)
{
char* temp = arr;
while(*arr)
arr++;
int num = (int)(arr-temp);
return num;
}
int main()
{
char arr[] = "abcdef*";
printf("%d",my_strlen(arr));
return 0;
}
strcat的使用和模拟实现
strcat的使用
strcat函数可以把源字符串追加到目标字符串的结尾。
头文件
#include<string.h>
声明
char* strcat(chardest,const charsrc)
参数
dest—>destination,指向目标数组,包含字符串,且有足够的空间被追加字符串。
src—>sourse,指向源字符串(要追加的字符串)。
返回值
返回追加完后的字符串的指针dest,返回类型为char*。
实例:
#include<string.h>
#include<stdio.h>
int main()
{
char str1[20] = "12345";
char str2[] = "abcde";
strcat(str1, str2);
printf("%s", str1);
return 0;
}
strlcat的模拟实现
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
char* My_Strcat(char* dest, char* src)
{
char* begin = dest;
while (*dest)
dest++;
while (*dest++ = *src++)
;
return begin;
}
int main()
{
char str1[20] = "12345";
char str2[] = "abcde";
My_Strcat(str1, str2);
printf("%s", str1);
return 0;
}
strcpy的使用和模拟实现
strcpy的使用
strcpy可以将源字符串2内容复制到目标字符串1内。
头文件
#include<string.h>
声明
char * strcpy(char * destination,const char * sourse)
参数
destination—>目标地址,即用来复制的字符串。
sourse—>源字符串,即被复制的字符串。
返回值
返回值为以destination开始的地址。类型为char*
注意:
1.源字符串必须以’\0’结尾
2.strcpy函数会将源字符串内的’\0’也复制到目标空间内
3.目标字符串必须有足够的空间。
4.目标空间必须可修改
实例:
将str2内容复制到str1内。
strcpy的模拟实现
#include<stdio.h>
#include<assert.h>
void My_strcpy(char * dest,char * src)
{
assert(dest!=NULL);//预防参数为空指针
assert(src != NULL);
while (*dest++ = *src++)//遍历交换两数组内容
{
;
}
}
int main()
{
char str1[20] = "**********";
char str2[] = "我是天才";
My_strcpy(str1, str2);
printf("%s", str1);
return 0;
}
strcmp的使用和模拟实现
strcmp通过比较两字符串对应位置字符的Ascll码值来比较大小。
strcmp的使用
头文件
#include<string.h>
声明
int strcmp(const char * str1,const char * str2)
参数
str1—>要比较的字符串1
str2—>要比较的字符串2
返回值
如果返回值大于零,则表示字符串1大于字符串2
如果返回值等于零,则表示字符串1等于字符串2
如果返回值小于零,则表示字符串1小于字符串2
实例:
#include<stdio.h>
#include<string.h>
int main()
{
char str1[] = "abcdef";
char str2[] = "abddef";
if (strcmp(str1, str2) > 0)
{
printf("str1大于str2");
}
else if (strcmp(str1, str2) > 0)
{
printf("str1等于str2");
}
else
{
printf("str1小于str2");
}
return 0;
}
strcmp的模拟实现
#include<stdio.h>
int My_Strcmp(char* p1, char* p2)
{
while (*p1 == *p2)
{
if (*p1 == '\0')
return 0;
p1++;
p2++;
}
return *p1 - *p2;
}
int main()
{
char str1[] = "abcd";
char str2[] = "abdd";
if (My_Strcmp(str1,str2) == 0)
{
printf(">");
}
else if (My_Strcmp(str1,str2) < 0)
{
printf("<");
}
else if (My_Strcmp(str1,str2) > 0)
{
printf(">");
}
return 0;
}