當前位置:
首頁 > 知識 > C語言字元串相關函數實現

C語言字元串相關函數實現

前言

【需求分析 】: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 == "");
{
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 == "");
{
return NULL;
}
*temp++ = *str++;
}
if(*temp != "")
{
*temp = "";
}
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 == "")
{
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 == "")
return (char *)str1;
while(*s1)
{
cur = s1;
s2 = str2;
while(*s1 && *s2 && (*s1 == *s2))
{
s1++;
s2++;
}
if(*s2 == "")
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


結語

不負一世韶華,成就七彩人生

C語言字元串相關函數實現

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 程序員小新人學習 的精彩文章:

Git 分支操作介紹
基於SSM實現的簡易員工管理系統

TAG:程序員小新人學習 |