1.写一个函数,实现 strlen() 的功能
NAME
strlen - calculate the length of a string
SYNOPSIS
#include <string.h>
size_t strlen(const char *s);
功能:计算字符串的长度,遇到\0才结束,且不计算\0
参数:
s:指定要计算长度的字符串
返回值:
返回字符串的长度
#include <stdio.h>
#include <string.h>
int my_strlen( char *s )
{
int num = 0;
while( *s != '\0' ) //遇到\0才结束,且不计算\0
{
num++;
s++;
}
return num;
}
int main()
{
char *p = "abcdefgh";
int n = my_strlen( p );
printf("my_strlen = %d\n", n );
printf("strlen = %d\n", strlen(p) );
}
2.写一个函数,实现 strcpy() 的功能
NAME
strcpy, strncpy - copy a string
SYNOPSIS
#include <string.h>
char *strcpy(char *dest, const char *src);
char *strncpy(char *dest, const char *src, size_t n);
功能:把src字符串 复制到 dest指向的位置中 (\0也会复制)
参数:
dest:目标字符串
src :源字符串
n:指定要复制的字符个数
返回值:
将dest字符串返回
#include <stdio.h>
#include <string.h>
char * my_strcpy( char *dest, char *src )
{
/*
//指针方法
char * p = dest;
while( *src != '\0' )
{
*p = *src;
src++;
p++;
}
*p = '\0';
return dest;
*/
//数组方法
int i=0;
/*
while( src[i] != '\0' )
{
dest[i] = src[i];
i++;
}
dest[i] = '\0';
*/
while( (dest[i] = src[i]) != '\0' )
{
i++;
}
return dest;
}
int main()
{
char a[128] = {0};
char b[128] = {0};
scanf("%s",a);
char * c = my_strcpy(b,a);
strcpy(b,a);
printf("strcpy = %s\n",b);
printf("my_strcpy = %s\n",c);
}
=======================
可查看man手册
char * my_strncpy( char *dest, char *src , int n )
{
int i;
for(i = 0; i < n && src[i] != '\0'; i++)
{
dest[i] = src[i];
}
for ( ; i < n; i++) //n大于src的长度,剩下的全部复制为\0
{
dest[i] = '\0';
}
return dest;
}
结果如下图所示:
![](https://i-blog.csdnimg.cn/blog_migrate/8ab48ff1f7dd05455373961cb07ada70.png)
3. 写一个函数,实现strcmp() 的功能
NAME
strcmp, strncmp - compare two strings
SYNOPSIS
#include <string.h>
int strcmp(const char *s1, const char *s2);
int strncmp(const char *s1, const char *s2, size_t n);
功能:比较两个字符串的大小,按照字典顺序来比较
参数:
s1,s2:两个字符串
n:指定要比较的字符个数
返回值:
0 相等
>0 s1大于s2
<0 s1小于s2
#include <stdio.h>
#include <string.h>
/*
功能:比较两个字符串的大小,按照字典顺序来比较
参数:
s1,s2:两个字符串
n:指定要比较的字符个数
返回值:
0 相等
>0 s1大于s2
<0 s1小于s2
*/
int my_strcmp( char *s1, char *s2)
{
//数组
int i;
for( i=0; s1[i] == s2[i] ; i++ )
{
if( s1[i] == '\0' )
{
return 0;
}
}
return s1[i]-s2[i];
/*//指针
for( ; *s1 == *s2 ; s1++, s2++ )
{
if( *s1 == '\0' )
{
return 0;
}
}
return *s1 - *s2;
*/
}
int main()
{
char a[128] = "123456789";
char b[128] = "123456";
scanf("%s%s",a,b);
int num = my_strcmp(a,b);
printf("my_strcmp = %d\n",num);
}
结果如下图:
![](https://i-blog.csdnimg.cn/blog_migrate/3be8daf0cbda4ed009cb7175906b5ba9.png)
4.写一个函数,实现 strcat() 的功能
NAME
strcat, strncat - concatenate two strings
SYNOPSIS
#include <string.h>
char *strcat(char *dest, const char *src);
char *strncat(char *dest, const char *src, size_t n);
功能:将src 拼接到 dest字符串的后面
参数:
src、dest:两个字符串
n:指定要拼接的字符个数
返回值:
返回dest
例子:
char a[] = "123";
char b[32] = {"abc"};
strcat( b, a ); // b --> abc123
strncat( b, a , 2); // b --> abc12
c#include <stdio.h>
#include <string.h>
/*
功能:将src 拼接到 dest字符串的后面
参数:
src、dest:两个字符串
n:指定要拼接的字符个数
返回值:
返回dest
例子:
char a[] = "123";
char b[32] = {"abc"};
strcat( b, a ); // b --> abc123
strncat( b, a , 2); // b --> abc12
*/
char *my_strcat(char *dest, char *src)
{
char *p = dest; //保存字符串的首地址
while( *dest )
{
dest++;
}
while( *dest = *src )
{
dest++;
src++;
}
return p;
}
int main()
{
char a[128] = {0};
char b[128] = {0};
scanf("%s%s",a,b);
char * str = my_strcat(a, b);
printf("str = %s\n",str);
}
结果如下图:
![](https://i-blog.csdnimg.cn/blog_migrate/0db141251f5f5d95492a8cfc1661ec86.png)