分享免费的编程资源和教程

网站首页 > 技术教程 正文

C语言字符串相关函数实现

goqiw 2024-09-20 22:54:04 技术教程 25 ℃ 0 评论

前言

【需求分析 】:C语言中关于字符串的函数有很多,但往往需要的是靠自己去理解,去实现。

  • 实现函数my_strlen()

【功能描述】 :返回字符串的长度


方法一 :

int my_strlen(const char *str)
{
 int count = 0;
 assert(str);
 while(*str)
 {
 count++;
 str++;
 }
 return count;
}
1
2
3
4
5
6
7
8
9
10
11

方法二 :

int my_strlen(const char *str)
{
 assert(str);
 if(*str == '\0');
 {
 return 0;
 }
 else
 {
 return 1+my_strlen(str+1);
 }
}
1
2
3
4
5
6
7
8
9
10
11
12

方法三 :

int my_strlen(const char *str)
{ 
 char *p = str;
 assert(str);
 while(*p)
 {
 p++;
 }
 return p-str;
}
1
2
3
4
5
6
7
8
9
10

  • 实现函数my_strcpy()

【功能描述】 :第一个字符串被第二个字符串所覆盖


char *my_strcpy(char *dest, const char *str)
{
 char *temp = dest;
 assert(str);
 assert(dest);
 while(*temp++ = *str++)
 { 
 ;
 }
 return dest;
}
1
2
3
4
5
6
7
8
9
10
11

  • 实现函数my_strncpy()

【功能描述】 :有个数限制字符串复制


char *my_strncpy(char *dest, const char *str,size_t count)
{
 int i = 0;
 char *temp = dest;
 assert(str);
 assert(dest);
 while(count--)
 { 
 if(*str == '\0');
 {
 return NULL; 
 }
 *temp++ = *str++;
 }
 if(*temp != '\0')
 {
 *temp = '\0';
 }
 return dest;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

  • 实现函数my_strcat()

【功能描述】 :将第二个字符串链接在第一个字符串后面


char *my_strcat(char *dest, const char *str)
{
 char *temp = dest;
 assert(str);
 assert(dest);
 while(*temp)
 {
 temp++;
 }
 while(*temp++ = *str++)
 {
 ;
 }
 return dest;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

  • 实现函数my_strcmp()

【功能描述】 :比较两个字符串大小(比较acsll码值),大于返回大于零的数,小于零返回小于零的数,否则返回零。


int my_strcmp(const char *str1, const char *str2)
{
 assert(str1);
 assert(str2);
 while(*str1 == *str2)
 {
 if(*str1 == '\0')
 {
 return 0;
 }
 str1++;
 str2++;
 }
 return srt1 - str2;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

  • 实现函数my_strstr()

【功能描述】 :看第一个串是否包含第二个串,不包含返回NULL,否则返回 串所在第一个位置


char *my_strstr(const char *str1,const char *str2)
{
 assert(str1);
 assert(str2);
 char *s1 = (char *)srt1;
 char *s2 = (char *)str2;
 char *cur = NULL;
 if(*str2 == '\0')
 return (char *)str1;
 while(*s1)
 {
 cur = s1;
 s2 = str2;
 while(*s1 && *s2 && (*s1 == *s2))
 {
 s1++;
 s2++;
 }
 if(*s2 == '\0')
 return s1;
 s1++;
 }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

  • 实现函数my_memcpy()

【功能描述】 :将第二个参数按字节复制到第一个字符串(两参数分别在两块独立内存)


void *my-memcpy(void *dest ,const void *str,size_t count)
{
 void * temp = dest;
 assert(dest);
 assert(str);
 //从前到后按字节复制
 while(count--)
 {
 *(char *)temp = *(char *)str;
 temp = (char *)temp + 1;
 str = (char *)str + 1;
 }
 return dest;
} 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

  • 实现函数my_memmove()

【功能描述】 :将第二个参数按字节复制到第一个字符串(内存块可重叠)(字符 数组 整数……都可以复制)


void * memmove(void *dest, const void *str,size_t count)
{
 void * temp = dest;
 assert(dest);
 assert(str);
 if(temp <= str||str >= dest+count)
 {
 while(count--)
 {
 *(char *)temp = *(char *)str;
 temp = (char *)temp + 1;
 str = (char *)str + 1;
 } 
 }
 else
 {
 temp = (char *)temp + count - 1;
 str = (char *)str + count - 1;
 while(count--)
 {
 *(char *)temp = *(char *)str;
 temp = (char *)temp - 1;
 str = (cahr *)str - 1;
 }
 }
 return dest;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29

结语

不负一世韶华,成就七彩人生

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表