您的位置:首页 > 编程语言 > C语言/C++

C语言模拟实现strcpy、strncpy、strcmp、strcat、strstr

2017-07-10 17:26 645 查看

1,模拟实现strcpy

功能:字符串拷贝函数

代码:

char* my_strcpy(char* dest, const char* src)
{
assert(dest);
assert(src);
char* ret = dest;
while (*dest++ = *src++)
{
;
}
return ret;
}


测试:

int main()
{
char str1[20];//必须给足够大的空间保证str2能存储
char* str2 = "HowAreYou";
char* ret = my_strcpy(str1, str2);
printf("%s\n", ret);
system("pause");
return 0;
}




2,模拟实现strncpy

功能:类似于strcpy,可以将字符串中的n个字符拷贝

代码:

char* my_strncpy(char* dest, const char* src, int n)
{
assert(dest);
assert(src);
char* ret = dest;
while (n)
{
*dest++ = *src++;
n--;
}
if (*(dest - 1) != '\0');
{
*dest = '\0';
}
return ret;
}


测试:

int main()
{
char str1[5];
char* str2 = "abcdefg";
char* ret = my_strncpy(str1, str2,4);
printf("%s\n", ret);
system("pause\n");
return 0;
}




3,模拟实现strcmp

功能:字符串比较函数,相等返回0,小于返回小于0的数,大于则返回大于0的数

代码:

int my_strcmp(char* arr, char* str)
{
assert(arr);
assert(str);
while (*arr == *str)
{
if (*arr == '\0' || *str == '\0')
{
return 0;
}
arr++;
str++;
}
return *arr - *str;
}


测试:

int main()
{
char *p1 = "ab";
char *p2 = "abcd";
char *p3 = "defab";
printf("%d\n", my_strcmp(p1, p1));    //0
printf("%d\n", my_strcmp(p1, p2));    //-99
printf("%d\n", my_strcmp(p1, p3));    //-3
printf("%d\n", my_strcmp(p3, p1));    //3
system("pause\n");
return 0;
}




4,模拟实现strcat

功能:字符串追加函数

代码:

char* my_strcat(char* dest, char* src)
{
assert(dest);
assert(src);
char* ret = dest;
while (*dest)
{
*dest++;
}
while (*dest++ = *src++)
{
;
}
return ret;
}


测试:

int main()
{
char str1[20] = "hello ";
char* str2 = "world";
char* ret = my_strcat(str1, str2);
printf("%s\n", ret);
system("pause\n");
return 0;
}




5,模拟实现strstr

功能:判断一个字符串是否是另一个字符串的子串,如果是,则返回在这个字符串中首次出现的位置,如果不是,返回NULL

代码:

char* my_strstr(const char* str, const char*substr)
{
const char* s1 = str;
const char* s2 = substr;
const char*  cur = str;
assert(str);
assert(substr);
if (*substr == '\0')
{
return str;
}
while (cur)
{
s1 = cur;
s2 = substr;
while (*s1 == *s2)
{
s1++;
s2++;
}
if (*s2 == '\0')
return cur;
if (*s1 == '\0')
return NULL;
cur++;
}
return NULL;
}


测试:

int main()
{
const char* str = "abcdefg";
const char* substr = "bcd";
char* ret = my_strstr(str, substr);
if (ret == NULL)
{
printf("No\n");
}
else
{
printf("%s\n", ret);
}
system("pause\n");
return 0;
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言
相关文章推荐