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
結語
不負一世韶華,成就七彩人生


TAG:程序員小新人學習 |