前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >字符串操作——C语言实现

字符串操作——C语言实现

作者头像
用户4645519
发布2020-09-07 11:04:41
4590
发布2020-09-07 11:04:41
举报
文章被收录于专栏:嵌入式学习嵌入式学习

代码如下:

代码语言:javascript
复制
#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;
}

运行结果如下:

代码语言:javascript
复制
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.
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-08-19 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档