字符串操作——C语言实现
代码如下:
#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语言实现的更多相关文章
- C语言字符串操作总结大全(超详细)
本篇文章是对C语言字符串操作进行了详细的总结分析,需要的朋友参考下 1)字符串操作 strcpy(p, p1) 复制字符串 strncpy(p, p1, n) 复制指定长度字符串 strcat( ...
- C语言字符串操作常用库函数
C语言字符串操作常用库函数 *********************************************************************************** 函数 ...
- c语言字符串操作大全
C语言字符串操作函数 函数名: strcpy 功 能: 拷贝一个字符串到另一个 用 法: char *stpcpy(char *destin, char *source); 程序例: #incl ...
- 转:C语言字符串操作函数 - strcpy、strcmp、strcat、反转、回文
转自:C语言字符串操作函数 - strcpy.strcmp.strcat.反转.回文 C++常用库函数atoi,itoa,strcpy,strcmp的实现 作者:jcsu C语言字符串操作函数 1. ...
- C语言的本质(22)——C标准库之字符串操作
编译器.浏览器.Office套件等程序的主要功能都是符号处理,符号处理功能在程序中占相当大的比例,无论多复杂的符号处理都是由各种基本的字符串操作组成的,下面介绍如何用C语言的库函数做字符串初始化.取长 ...
- C语言的常用字符串操作函数(一)
一直做的是单片机相关的程序设计,所以程序设计上更偏向底层,对于字符串的操作也仅限于液晶屏幕上的显示等工作,想提高下字符串操作的水平,而不是笨拙的数组替换等方式,翻看帖子发现C语言的字符串操作函数竟然这 ...
- R语言学习 第五篇:字符串操作
文本数据存储在字符向量中,字符向量的每个元素都是字符串,而非单独的字符.在R中,可以使用双引号,或单引号表示字符. 一,字符串中的字符数量 函数nchar()用于获得字符串中的字符数量: > s ...
- C语言字符串操作函数 - strcpy、strcmp、strcat、反转、回文
原文:http://www.cnblogs.com/JCSU/articles/1305401.html C语言字符串操作函数 1. 字符串反转 - strRev2. 字符串复制 - strcpy3. ...
- 6. Go语言—字符串操作
一.字符串支持的转义字符 \r 回车符(返回行首) \n 换行符(直接跳到下一行的同列位置) \t 制表符 \' 单引号 \" 双引号 \\ 反斜杠 \uXXXX Unicode字符码值转义 ...
随机推荐
- Java基本数据类型及所占字节大小
一.Java基本数据类型 基本数据类型有8种:byte.short.int.long.float.double.boolean.char 分为4类:整数型.浮点型.布尔型.字符型. 整数型:byte. ...
- 双十一高并发场景背后的数据库RDS技术揭秘
[战报]11月11日聚石塔(阿里云数据库RDS产品形态)峰值QPS突破X00w,Proxy 峰值QPS超过X00w. 双十一就要来了,全世界都为其疯狂,但是在双十一抢购中经常会出现几万人抢一个红包或者 ...
- Java Web学习总结(12)Filter过滤器
一,Filter简介 Filter也称之为过滤器,Filter是对客户端访问资源的过滤,符合条件放行,不符合条件不放行,并且可以对目标资源访问前后进行逻辑处理. 二,Filter开发步骤 1)编写一个 ...
- 【HDU6609】Find the answer【线段树】
题目大意:给你一个序列,对于每个i,你可以选择1~i-1中任意多的数并将它删去,剩余的数(包括i)∑≤m,问对于每个i最少删几个数可以达到要求 题解: 考虑朴素的思想,对于每个i,我只需要删去最大的若 ...
- [CSP-S模拟测试]:marshland(最大费用可行流)
题目描述 前方有一片沼泽地.方便地,我们用一个$n\times n$的网格图来描述它,每一个格子代表着沼泽地的一小片区域.其中$(1,1)$代表网格图的左上角,$(n,n)$代表网格图的右下角.若用$ ...
- 建议66,67 注意Arrays.asList()的使用
代码 public static void main(String[] args) { int[]data = {1,2,3,4,5}; List list = Arrays.asList(data) ...
- java反射(一)--认识反射机制
一.认识java反射机制 在java语言中,之所以会有如此众多的开源技术支撑,很大的一部分来源于java最大特征--反射机制.能够灵活的去使用反射机制进行项目的开发与设计,才能够真正接触到java的精 ...
- Codeforces 488D Strip (set+DP)
D. Strip time limit per test 1 second memory limit per test 256 megabytes input standard input outpu ...
- SpringMVC学习(2):经典的HelloWorld实现
前一篇简单介绍了Spring MVC的一些知识,下面就要开始学习如何把Spring MVC运用到具体的项目中去. 首先还是从一个简单的Hello World项目说起: 我机器的开发环境为: Ubunt ...
- IT面试技巧(2)
21.最能概括你自己的三个词是什么? 回答提示:我经常用的三个词是:适应能力强,有责任心和做事有始终,结合具体例子向主考官解释, 22.你的业余爱好是什么? 回答提示:找一些富于团体合作精神的,这里有 ...