代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h> char ch1[]={ 'c', '+', '+'};
char ch2[]={ 'c', '+', '+', '\0'};
char ch3[] = "myC++";
char ch4[] = "good idea"; int strlen_new(const char* src);//const 2'
char* strcat_new(char *strD, const char *strS);
char* strcpy_new(char *strD, const char *strS);
int strcmp_new(const char *s1, const char *s2);
void* memcpy_new(void* dst, void* src, size_t n);
void* memmove_new(void* dst, void* src, size_t n); void* memmove_new(void* dst, void* src, size_t n)
{
char * dp = (char*)dst;
char * sp = (char*)src;
assert(src != NULL && dst != NULL && n>0);
if(sp > dp || (sp + n) < dp)
{
while(n--)
{
*(dp++)=*(sp++);
}
*dp='\0';
}
else if (sp < dp)
{
sp += n;
dp += n;
*dp = '\0';
while(n--)
*(--dp) = *(--sp);
}
return dst;
} void* memcpy_new(void* dst, void* src, size_t n)
{
char* dp = (char*)dst;
char* sp = (char*)src;
assert(src != NULL && dst != NULL && n>0);
while(n--)
{
*dp = *sp;
dp++;
sp++;
}
dp = '\0';
return dst;
} int strlen_new(const char* src)
{
int count = 0;
assert(src != NULL);
while(*src++ != '\0')
{
count++;
} return count;
} char * strcat_new(char * strD, const char * strS)
{
char * add = strD;
assert(strD != NULL && strS != NULL); while(*strD != '\0')
strD++;
while((*strS) != '\0')
{
*strD = *strS;
strD++;
strS++;
}
*strD = '\0'; //while(*strD++ = *strS++);//cat more efficient return add;
} char* strcpy_new(char *strD, const char *strS)
{
char * add = strD;
assert(strD != NULL && strS != NULL); while(*strS != '\0')
*strD++ = *strS++; //attention姝ゅ锛岃嫢*strS涓衡€橽0鈥橈紝鍒欏叾鍏堣祴鍊肩粰strD锛屾晠鏈€鍚庝笉闇€瑕佸啀娣诲姞'\0'
//while(*strD++ = *strS++); *strD = '\0'; return add;
} int strcmp_new(const char *s1, const char *s2)
{
//int ret;
assert(s1 != NULL && s2 != NULL); while(*s1 && *s2 && *s1 == *s2)
{
s1++;
s2++;
}
return *s1 - *s2;
//return *s2 - *s1;
} int main ()
{
int str_len = 0; char* mem_src = "the src test memcpy";
char mem_dest[29] = "another hello";
char* mv_src = "the src test memmove";
char mv_dest[20];
printf("Test memcpy ret is :%s\n", memcpy(mem_dest, mem_src, 20));
printf("Test memmove ret is :%s\n", memmove_new(mv_dest, mv_src, 10)); str_len = strlen_new(ch3); //printf("%s\n", strcat_new(ch3, ch4)); printf("%s\n", strcpy_new(ch3,ch4)); printf("strcmp = %d\n", strcmp_new(ch3,ch4)); printf("len = %d ,%s\n", str_len, ch3);
return 0;
}

运行结果如下:

Test memcpy ret is :the src test memcpy
Test memmove ret is :the src te
good idea
strcmp = 6
len = 5 ,good idea Process returned 0 (0x0) execution time : 0.047 s
Press any key to continue.

字符串操作——C语言实现的更多相关文章

  1. C语言字符串操作总结大全(超详细)

    本篇文章是对C语言字符串操作进行了详细的总结分析,需要的朋友参考下 1)字符串操作  strcpy(p, p1) 复制字符串  strncpy(p, p1, n) 复制指定长度字符串  strcat( ...

  2. C语言字符串操作常用库函数

    C语言字符串操作常用库函数 *********************************************************************************** 函数 ...

  3. c语言字符串操作大全

     C语言字符串操作函数 函数名: strcpy 功  能: 拷贝一个字符串到另一个 用  法: char *stpcpy(char *destin, char *source); 程序例: #incl ...

  4. 转:C语言字符串操作函数 - strcpy、strcmp、strcat、反转、回文

    转自:C语言字符串操作函数 - strcpy.strcmp.strcat.反转.回文 C++常用库函数atoi,itoa,strcpy,strcmp的实现 作者:jcsu C语言字符串操作函数 1. ...

  5. C语言的本质(22)——C标准库之字符串操作

    编译器.浏览器.Office套件等程序的主要功能都是符号处理,符号处理功能在程序中占相当大的比例,无论多复杂的符号处理都是由各种基本的字符串操作组成的,下面介绍如何用C语言的库函数做字符串初始化.取长 ...

  6. C语言的常用字符串操作函数(一)

    一直做的是单片机相关的程序设计,所以程序设计上更偏向底层,对于字符串的操作也仅限于液晶屏幕上的显示等工作,想提高下字符串操作的水平,而不是笨拙的数组替换等方式,翻看帖子发现C语言的字符串操作函数竟然这 ...

  7. R语言学习 第五篇:字符串操作

    文本数据存储在字符向量中,字符向量的每个元素都是字符串,而非单独的字符.在R中,可以使用双引号,或单引号表示字符. 一,字符串中的字符数量 函数nchar()用于获得字符串中的字符数量: > s ...

  8. C语言字符串操作函数 - strcpy、strcmp、strcat、反转、回文

    原文:http://www.cnblogs.com/JCSU/articles/1305401.html C语言字符串操作函数 1. 字符串反转 - strRev2. 字符串复制 - strcpy3. ...

  9. 6. Go语言—字符串操作

    一.字符串支持的转义字符 \r 回车符(返回行首) \n 换行符(直接跳到下一行的同列位置) \t 制表符 \' 单引号 \" 双引号 \\ 反斜杠 \uXXXX Unicode字符码值转义 ...

随机推荐

  1. Thymeleaf 基本用法总结

    Thymeleaf 基本用法总结 一.引用命名空间 <html xmlns:th="http://www.thymeleaf.org"> 在html中引入此命名空间,可 ...

  2. autoit3 脚本自动安装实例

    软件自动安装的相关实例!贴出来用于参考,并部分相关语法与示例 #RequireAdmin If DriveMapGet("T:")=="" Then Drive ...

  3. centos 6.5 配置 DNS

    编辑 vi /etc/resolv.conf 修改 DNS nameserver 202.96.134.133 nameserver 202.96.128.86 nameserver 8.8.8.8 ...

  4. hdu 5120 Intersection (圆环面积相交->圆面积相交)

    Problem Description Matt is a big fan of logo design. Recently he falls in love with logo made up by ...

  5. Spring CGLlB动态代理

    JDK 动态代理使用起来非常简单,但是它也有一定的局限性,这是因为 JDK 动态代理必须要实现一个或多个接口,如果不希望实现接口,则可以使用 CGLIB 代理. CGLIB(Code Generati ...

  6. 全国5A级旅游景区已达250家

    至目前,全国5A级旅游景区已达250家,快来数数你去过多少? 全国5A级旅游景区 西藏(+) 拉萨市大昭寺.拉萨布达拉宫景区.日喀则扎什伦布寺景区.林芝巴松措景区 新增1:日喀则扎什伦布寺景区 扎什伦 ...

  7. STL双端队列 deque

    头文件:#include<deque> 构造方法: ①.创建一个没有任何元素的双端队列:deque<type> deq ②.用另一个类型相同双端队列初始化该双端队列:deque ...

  8. JS 获取json key和value

    var json= { "Type": "Coding", "Height":100 }; for (var key in json) { ...

  9. 关于ExtJS对javascript中的Object的扩展

    关于ExtJS对javascript中的Object的扩展,可以参考其帮助文档,文档下载地址:http://download.csdn.net/detail/z1137730824/7748893 下 ...

  10. 解决:python安装mysqldb模块报 EnvironmentError: mysql_config not found

    最近学习python操作mysql需要安装mysqldb模块 出现EnvironmentError: mysql_config not found 经网上查看,需要安装mysql客户端开发库libmy ...