strlen()函数
功能介绍:用于计算一个字符串的长度。在计算字符串长度的时候,遇到“\0”就停止计数。
函数原型:
size_t strlen ( const char * str )
参数:char*类型的指针,在传值的时候传一个字符串的地址或者字符数组的地址。
函数的模拟实现代码(均含测试):
#include <stdio.h>
int m_strlen(const char * arr)
{
int cout = 0;
while (*arr)
{
arr++;
cout++;
}
return cout;
}
int main()
{
char arr[] = "you are right";
int ret = m_strlen(arr);
printf("%d\n", ret);
return 0;
}
strcpy()函数
函数原型:char * strcpy ( char * destination, const char * source )
功能介绍:将源字符串数组的内容拷贝到目标字符串数组中。
注意:
1.在使用的时候,注意常量字符串是不可以修改的,不要将内容拷贝到常量字符串中,也就是说,目标空间的内容是可以修改的。
2.拷贝到的目标空间要足够大,以确保能够容下源字符串。
函数的模拟实现代码:
#include <stdio.h>
#include <assert.h>
char* my_strcpy(char* str1,char* str2)
{
assert(str1 && str2);
char* dest = str1;
while (*str1++ = *str2++)
{
;
}
*str1 = *str2;
return dest;
}
int main()
{
char arr1[10] = {0};//arr1 = "fsdg"常量字符串不可以修改
char arr2[] = "defrty";
my_strcpy(arr1, arr2);
//printf("%s\n", arr1);
printf("%s", my_strcpy(arr1, arr2));
return 0;
}
strcat()函数
函数原型:char * strcat ( char * destination, const char * source )
功能介绍:将源字符串的副本追加到目标字符串。
返回值:返回的是destination数组的指针
注意:不可以将自身的字符串追加到自身后面。
函数的模拟实现代码:
#include <stdio.h>
#include <assert.h>
//在str1后面追加字符串str2,返回str1的首地址
char* m_strncat(char* str1, const char* str2, int num)
{
assert(str1 && str2);
char* ret = str1;
while (*str1)
{
str1++;
}
while (num--)
{
*str1 = *str2;
str1++;
str2++;
}
return ret;
}
int main()
{
char str1[20] = "asdf";
char str2[] = "koij";
int num = 0;
scanf("%d",&num);
char* ret = m_strncat(str1,str2,num);
printf("%s\n", ret);
return 0;
}
strcmp()函数
函数原型:
int strcmp ( const char * str1, const char * str2 )
功能介绍:比较两个字符串的大小,比较字符串是根据字符串中每个字符的ASCII码来比较的,不是根据字符串长度来比较的。
返回值:
当str1小于str2返回一个小于0的整数
str1等于str2的时候,返回0
str1大于str2的时候,返回一个大于0的数
函数模拟实现:
#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++;
}
//比较
if (*str1 > *str2)
return 1;
else
return -1;
}
//int my_strcmp(const char* str1, const char* str2)
//{
// assert(str1 && str2);
//
// while (*str1++ == *str2++)//向后寻找不同的字符元素
// {
// if (*str1 == '\0')
// {
// return 0;
// }
// }
// return *str2 - *str1;
//}
int main()
{
char str1[] = "asdfg";
char str2[] = "asdfg";
int ret = my_strcmp(str1, str2);
printf("%d\n", ret);
return 0;
}
strstr()函数
函数原型:
char * strstr ( const char *, const char * )
函数功能:在str1中查找str2字符串,返回指向 str1 中首次出现的 str2 的指针。
函数模拟实现:
#include <stdio.h>
//在str1中找str2字符串,找到之后返回str1中当前地址
/*
1.str2空值的时候
2.str1 == str2==\0
3.str1 == str2 != \0
*/
char* m_strstr(char* str1,char* str2)
{
char* cur = str1; //找到的字符指针
char* start = str2; //str2的起始位置
char* p1 = NULL; //str1移动指针
char* p2 = NULL; //str2移动指针
while (*str1) //str1不是空字符的时候
{
p1 = cur;
p2 = start;
while (*p1 == *p2)
{
p1++;
p2++;
if (*p1 && *p2) //出现第二种情况时
{
return cur;
}
}
cur++;
}
return cur;
}
int main()
{
char str1[] = "asdfghbnm";
char str2[] = "fgh";
printf("%s\n", m_strstr(str1, str2));
return 0;
}
C++官网在<string.h>头文件中可具体查看其他字符串函数