`
java-mans
  • 浏览: 11388991 次
文章分类
社区版块
存档分类
最新评论

字符串处理函数strlen、strcpy、strcat、strcmp和convert的C语言实现

 
阅读更多

本文主要用C语言实现了字符串处理中的如下几个函数功能。

1)Mystrlen实现的是求字符串的长度

2)Mystrcpy实现字符串的复制

3)Mystrcat实现连接两个字符串

4)Mystrcmp实现比较两个字符串大小

5)convert实现小写字符到大写字符的转换


实现的代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <assert.h>

// Get the length of string 
int Mystrlen(const char* src)
{
	const char* p = src;
	assert(src != NULL);

	while(*(p++) != '\0');
	return p - src - 1;
}

// Copy the source string to destination string
void Mystrcpy(char* dest, const char* src)
{
	int i = 0;
	assert(dest != NULL && src != NULL);

	if(dest && src)
	{
		while((*(dest + i) = *(src + i)) != '\0')
			i++;
		*(dest + i) = '\0';
	}
//	return dest;
}

// concatenate the two string.
void Mystrcat(char *dest, const char *src)
{
	assert(dest != NULL && src != NULL);
	while(*(dest++) != '\0');
	dest--;
	while((*dest++ = *src++) != '\0');
}

// compare the two string 
int Mystrcmp(const char *str1, const char *str2)
{
	assert(str1 != NULL && str2 != NULL);
	while(*str1 != '\0' && *str2 != '\0')
	{
		if(*str1 > *str2)
			return 1;
		else if(*str1 == *str2)
		{
			*str1++;
			*str2++;
		}
		else
		{
			return -1;
		}
	}

	if(*str1 != '\0')
		return 1;
	else if (*str2 != '\0')
		return -1;
	else
		return 0;

}

// Convert the Low case to Upper case
void convert(char *str)
{
	while(*str != '\0')
	{
		if(*str >= 'a' && *str <= 'z')
		{
			*str = *str + 'A' - 'a';
		}
		str++;
	}
}

int main()
{
	int i = 0;

	char dest[20] = "hello,";
	char *s = "world!";
	char d[7];
	int length;

	length = Mystrlen(s);
	printf("%d\n", length);

	Mystrcpy(d, s);
	puts(s);

	convert(d);
	puts(d);

	Mystrcat(dest, s);
	puts(dest);
	
	if(Mystrcmp(dest, s) == 1)
	{
		printf("dest great than s");
	}
	else if(Mystrcmp(dest, s) == -1)
	{
		printf("dest less than s");
	}
	else
	{
		printf("dest equal to s");
	}

	system("pause");
	return 0;
}

其中strlen还有如下的实现:

利用递归来实现计算字符串的长度,但是当字符串太长的时候,递归实现计算字符串的长度会出现如下的问题
1.开销太大,因为函数调用的开销比循环大很多。
2.递归的效率低,当深度太大时,可能会出现错误(如栈溢出)


代码如下:

方法1:

int my_strlen(const char* str)
{
	assert(NULL != str);
	if('\0' == *str)
	{
		return 0;
	}
	else
	{
		return (1 + my_strlen(++str));
	}
}

方法2:

int my_strlen(const char* str)
{
	assert(NULL != str);
	return ('\0' != *str) ? (1 + my_strlen(++str)) : 0;
}


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics