面试过程中,经常碰到的一类基础编程题是关于C中string.h中若干常用函数的实现,下面做个简单整理:
1. 【mystrlen】 ---- 求字串长度
size_t
mystrlen
(
const
char
*
str
)
{
assert
(
str
);
size_t
length
=
0
;
while
((
*
str
++
)
!=
'\0'
)
length
++
;
return
length
;
}
2. 【mystrcpy】 ----- 字符串拷贝
char
*
mystrcpy
(
char
*
des
,
const
char
*
src
)
{
assert
(
des
&&
src
);
char
*
ptr
=
des
;
while
((
*
des
++=*
src
++
)
!=
'\0'
)
;
return
ptr
;
}
3. 【mystrcat】 ---- 字符串连接
char
*
strcat
(
char
*
str1
,
const
char
*
str2
)
{
assert
(
str1
&&
str2
);
char
*
ptr
=
str1
;
while
(
*
ptr
!=
'\0'
)
ptr
++
;
while
((
*
ptr
++=*
str2
++
)
!=
'\0'
)
;
return
str1
;
}
4. 【mystrcmp】---- 字符串比较
int
mystrcmp
(
const
char
*
s1
,
const
char
*
s2
)
{
assert
(
s1
&&
s2
);
while
(
*
s1
&&*
s2
&&
(
*
s1
==*
s2
))
s1
++
,
s2
++
;
return
*
s2
-*
s1
;
}
5. 【mystrchr】 ----- 查找字符
char
*
mystrchr
(
const
char
*
str
,
char
c
)
{
assert
(
str
);
char
*
ptr
=
(
char
*
)
str
;
while
(
*
ptr
!=
'\0'
&&*
ptr
!=
c
)
ptr
++
;
return
*
ptr
==
c
?
ptr
:
NULL
;
}
6. 【mystrstr】 ---- 查找子串
char
*
mystrstr
(
const
char
*
str
,
const
char
*
substr
)
{
assert
(
str
&&
substr
);
size_t
len1
=
0
,
len2
=
0
,
pos
=
0
;
while
(
*
(
str
+
len1
)
!=
'\0'
)
len1
++
;
while
(
*
(
substr
+
len2
)
!=
'\0'
)
len2
++
;
if
(
len2
>
len1
)
return
NULL
;
while
(
pos
++<
len1
-
len2
)
{
int
ipos
=
0
;
while
((
ipos
++<
len2
)
&&
(
*
(
str
+
pos
+
ipos
)
==*
(
substr
+
ipos
)))
;
if
(
ipos
==
len2
)
return
(
char
*
)(
str
+
pos
);
}
return
NULL
;
}