strcpy、strncpy、strlen、memcpy、memset、strcat、strncat、strcmp、strncmp,strchr
2024-08-29 10:57:06
1、strcpy
#include<stdio.h>
#include<assert.h> char *mystrcpy(char *dest, const char *src)
{
assert((dest != NULL) && (src != NULL)); char *res = dest;
while ((*dest++ = *src++) != '\0'); return res;
} int main()
{
char *src = "";
char dest[];
printf("%s\n", src);
char *res = mystrcpy(dest, src);
printf("%s\n", res); return ;
}
2、strncpy
#include<stdio.h>
#include<assert.h> char* mystrncpy(char *dest, const char *src, size_t size)
{
assert((dest != NULL) && (src != NULL)); char *res = dest;
int i = ;
while (((*dest++ = *src++) != '\0') && (i++<size)); *(res + size) = '\0'; return res;
} int main()
{
char *src = "";
printf("%s\n", src);
char dest[];
char *res = mystrncpy(dest, src, );
printf("%s\n", res); return ;
}
3、strlen
(1)非递归实现
#include<stdio.h>
#include<assert.h> int mystrlen(const char *str)
{
assert(str != NULL); int len = ;
while ((*str++) != '\0')
++len; return len;
} int main()
{
char *str = "";
int len = mystrlen(str);
printf("%d\n", len); return ;
}
(2)递归实现
#include<stdio.h>
#include<assert.h> int strlenRecur(const char *str)
{
if (str == NULL || *str == '\0')
return ;
return strlenRecur(str + ) + ;
} int main()
{
char *str = "";
int len = strlenRecur(str);
printf("%d\n", len); return ;
}
4、memcpy
memcpy 和 strncpy 最大的区别是 memcpy不会遇到 '\0' 结束拷贝 。
(1)version1(不能解决数据区重叠问题):
#include<stdio.h>
#include<assert.h> char* mymemcpy1(char *dest, const char *src, size_t size)
{
assert((dest != NULL) && (src != NULL)); char *res = dest;
while (size)
{
*(dest++) = *(src++);
--size;
}
*(dest + size) = '\0'; return res;
} int main()
{
char *src = "";
char dest[];
char *res = mymemcpy1(dest, src,);
printf("%s\n", res); return ;
}
(2)version2(解决了数据区重叠问题):
#include<stdio.h>
#include<assert.h> char *mymemcpy2(char *dest, const char *src, size_t size)
{
assert((dest != NULL) && (src != NULL));
char *res = dest; if (dest > src&&dest < (src + size))
{
dest = dest + size - ;
src = src + size - ;
while (size--)
*dest-- = *src--;
}
else
while (size--)
*dest++ = *src++;
*(dest + size) = '\0'; return res;
} int main()
{
char *src = "";
char dest[];
char *res = mymemcpy2(dest, src,);
printf("%s\n", res); return ;
}
5、memset
#include<stdio.h>
#include<assert.h> void *mymemset(void *buf, const char c, size_t size)
{
assert(buf != NULL);
char *res = (char*)buf;
char *str = res;
while (size--)
*str++ = c; return res;
} int main()
{
char *src = "";
printf("%s\n", src);
char dest[];
void *buf = (char*)dest;
char *res = (char *)(mymemset(buf, 'a', ));
printf("%s\n", res); return ;
}
6、strcat
#include<stdio.h>
#include<assert.h> char *mystrcat(char *dest, const char *src)
{
assert((dest != NULL) && (src != NULL));
char *res=dest;
while (*dest != '\0')
++dest;
while (*src != '\0')
*dest++ = *src++; return res;
} int main()
{
char dest[] = "";
char *src = "abc";
char *res = mystrcat(dest, src);
printf("%s\n", res); return ;
}
7、strncat
#include<stdio.h>
#include<assert.h> char *mystrncat(char *dest, const char *src,size_t size)
{
assert((dest != NULL) && (src != NULL));
char *res=dest;
while (*dest != '\0')
++dest;
while ((*src != '\0')&&(size--))
*dest++ = *src++;
*dest = '\0'; return res;
} int main()
{
char dest[] = "";
char *src = "abcdef";
char *res = mystrncat(dest, src,);
printf("%s\n", res); return ;
}
8、strcmp
#include<stdio.h>
#include<assert.h> int mystrcmp(const char *str1, const char *str2)
{
assert((str1 != NULL) && (str2 != NULL));
while (*str1&&*str2 && (*str1++ == *str2++)); return (*str1 - *str2);
} int main()
{
char *str1 = "abcde";
char *str2 = "abdf";
int res = mystrcmp(str1, str2);
printf("%d\n", res); return ;
}
9、strncmp
#include<stdio.h>
#include<assert.h> int mystrncmp(const char *str1, const char *str2,size_t size)
{
assert((str1 != NULL) && (str2 != NULL));
while (*str1&&*str2 && (*str1++ == *str2++)&&size--); return (*str1 - *str2);
} int main()
{
char *str1 = "abcde";
char *str2 = "abdfsd";
int res = mystrncmp(str1, str2,);
printf("%d\n", res); return ;
}
10、strchr
#include<stdio.h>
#include<assert.h> char *mystrchr(const char *str, char c)
{
assert(str != NULL);
while (*str != '\0' && (*str != c))
++str; if (*str == c)
return (char*)str;
else
return NULL;
} int main()
{
char *str = "abcde";
char *res = mystrchr(str,'c');
printf("%s\n", res); return ;
}
最新文章
- C#进阶系列——MEF实现设计上的“松耦合”(一)
- [Head First设计模式]生活中学设计模式——状态模式
- 【luogu】 P1433 吃奶酪
- sikuli实战记录
- 第二章 时间控件(DateTime Picker)
- itellyou MSDN, 我告诉你 win7系统工具等
- ionic2 页面加载时图片添加的问题
- 算法 - 求和为n的连续正整数序列(C++)
- mac上做透明图片, png, alpha
- Android之如何混淆代码和相关配置
- 如何正确的使用uwsgi
- POJ 3630 , HDU 1671 Phone List - from lanshui_Yang
- css ie6最小高度问题
- Ansible进阶--playbook的使用
- Project support for both iOS 6 and iOS 7
- 访问arcserver中的featureServer服务
- phpstorm连接服务器,实时编辑上传文件到服务器
- 百度云虚拟主机配置 Thinkphp5.1
- Linux系统监控命令及定位Java线程
- laravel Schema 查看索引是否存在