分别实现strlen,strcpy,strcat,strcmp,strstr,memcpy
//1.实现strlen
//2.实现strcpy
//3.实现strcat
//4.实现strcmp
//5.实现strstr
//6.实现memcpy
//实现strlen(求字符串长度)
size_t Strlen(const char* str) //const确定参数的长度
{ //合法性校验
/if (str == NULL) {
return 0;
}/
assert(str != NULL);//断言,表达式为真,运行;为假,程序终止
int i = 0;
while (str[i] != ‘\0’) {
++i;
}
return i;
}
//实现strcpy(复制字符串)
char* Strcpy(char* dest, const char* src) {
//合法性校验
assert(src != NULL);
assert(dest != NULL);
int i = 0;
for (;src[i]!=’\0’;++i){ //到\0结束
dest[i] = src[i];
}
dest[i] = ‘i\0’; //将\0复制给最后一个地址
return dest;
}
//实现strcat(字符拼接)
char* Strcat(char* dest, const char* src) {
assert(dest != NULL);
assert(src != NULL);
//1,找到dest的结束位置
int i = 0;
for (; dest[i] != ‘\0’; ++i);
//2,吧src拷贝到dest的结束位置
for (int j = 0; src[j] != ‘\0’; ++j, ++i) {
dest[i] = src[j];
}
dest[i] = ‘\0’; //将\0加入dest
return dest;
}
//实现strcmp(比较字符串的大小)
int Strcmp(const char* str1, const char* str2) {
assert(str1 != NULL);
assert(str2 != NULL);//合法性校验
while (*str1 != ‘\0’&&*str2 != ‘\0’) {
if (*str1 < *str2) {
return -1;
}
else if (*str1 > *str2) {
return 1;
}
else {
++str1;//如果相等,字符加一
++str2;
}
}
if (*str1 < *str2) {//重新进行比较
return -1;
}
else if (*str1 > *str2) {
return 1;
}else{
return 0;}
}
//实现strstr(判定是否存在包含关系)
char* strstr(const char* str1, const char* str2)
{
assert(str1 != NULL);
assert(str2 != NULL);
if (!str1 || !str2)
{
return str1;
}
/* 遍历src字符串 /
while (str1)
{
/ 用来遍历子串 /
char bp = str1;
char sp = str2;
do
{
if (!*sp) /*到了sub的结束位置,返回src位置 */
return str1;
} while (*bp++ == *sp++);
str1++;
}
return NULL;
}
//实现memcpy(拷贝内存等,不包括\0)
void* Memcpy(void* dest, const void* src, size_t num) {
assert(dest != NULL);
assert(src != NULL);
char* pdest = (char*)dest;
const char* psrc = (const char*)src;
for (size_t i = 0; i < num; ++i) {
*pdest = *psrc;
++pdest;
++psrc;
}
return dest;
}