strlen strcmp strcat strcpy strncpy strstr strchar函数的实现

 

 

 

 

                                                                                                                                                                                                                                                                                                           strlen的实现

#include <iostream>
using namespace std;

int my_strlen(const char * str)
{
	int count = 0;
	while (*str++)
	{
		count++;
	}
	return count;
}

int main()
{
	char test[] = " abcd ";
	cout << my_strlen(test) << endl;

	system("pause");
	return 0;
}

strcmp 的实现

#include <iostream>
#include "assert.h"
using namespace std;

int my_strcmp(const char * str1, const char * str2)
{
	assert((str1 != NULL) && (str2 != NULL));

	while (*str1 == *str2)
	{
		if (*str1 == '\0')
		{
			return 0;
		}
		str1++;
		str2++;
	}
	
	return (unsigned char)*str1 - (unsigned char)*str2;
}

int main()
{
	char test1[] = "bbcd";
	char test2[] = "abcd";
	char test3[] = "abcd";
	cout << my_strcmp(test1, test2) << endl;
	cout << my_strcmp(test2, test3) << endl;
	system("pause");
	return 0;
}

strcat的实现


#include <iostream>
#include "string.h"
#include "assert.h"
using namespace std;

char * my_strcat( char * str1, char * str2)
{
	assert(str1 != NULL);
	assert(str2 != NULL);

	char * tmp = str1;
	
	while (*str1 != '\0')
	{
		str1++;
	}
	while (*str2 != '\0')
	{
		*str1++ = *str2++;
	}
	*str1 = '\0';
	return tmp;

}


int main()
{
	char test1[100] = "abcd";
	char test2[] = "cd";

	cout << my_strcat(test1, test2) << endl;
	system("pause");
	return 0;
}


strcpy的实现

#include <iostream>
#include "string.h"
#include "assert.h"
using namespace std;

char * my_strcpy(const char * src, char * dst)
{
	assert(src != NULL);
	assert(dst != NULL);

	char * tmp = dst;
	while (*src != '\0')
	{
		*dst = *src;
		dst++;
		src++;
	}
	return tmp;

}


int main()
{
	char test1[] = "abcd";
	char test2[sizeof(test1)] = "";

	cout << my_strcpy(test1, test2) << endl;
	system("pause");
	return 0;
}


strncpy的实现

#include <iostream>
#include "string.h"
#include "assert.h"
using namespace std;

char * my_strncpy(const char * src, char * dst, unsigned int n)
{
	assert(src != NULL);
	assert(dst != NULL);
	int i = 0;
	int target = 0;
	char * tmp = dst;
	int len = strlen(src);
	if (n >= len)
	{
		target = len;
	}
	else
	{
		target = n;
	}

	for ( i = 0; i < target; i++)
	{
		dst[i] = src[i];
	}
	dst[i] = '\0';

	return tmp;

}


int main()
{
	char test1[] = "abcd";
	char test2[sizeof(test1)] = "";

	cout << my_strncpy(test1, test2, 2) << endl;
	system("pause");
	return 0;
}

strstr的实现


#include <iostream>
#include "string.h"
#include "assert.h"
using namespace std;

int pos = 0;
const char * my_strstr(const char * str1, const char * str2)
{
	assert(str1 != NULL);
	assert(str2 != NULL);

	while (*str1 != '\0')
	{
		const char * p = str1;
		const char * q = str2;
		const char * res = NULL;
		pos++;
		if (*p == *q)
		{
			res = p;
			while (*p && *q && *q++ == *p++)
				;
			if (*q == '\0')
			{
				return (char *)res;
			}

		}
		str1++;
	}
	return NULL;

}



int main()
{
	const char test1[5] = "abcd";
	const char test2[3] = "c";

	if (my_strstr(test1, test2) == NULL)
	{
		cout << "cannot find!" << endl;
	}
	else
	{
		cout << "find, the pos is " << pos << endl;
		cout << my_strstr(test1, test2) << endl;
	}
	system("pause");
	return 0;
}

strchar的实现


#include <iostream>
#include "string.h"
#include "assert.h"
using namespace std;
int pos = 0;
const char * my_strchar(const char * str1, const char c)
{
	assert(str1 != NULL);
	
	while (*str1 != '\0')
	{
		const char * p = str1;
		const char * res = NULL;
		pos++;
		if (*p == c)
		{		
				res = p;
				
				return res;
		}
		str1++;
	}
	return NULL;
}

int main()
{
	const char test1[5] = "abcd";
	char test2 = 'e';
	if (my_strchar(test1, test2) == NULL)
	{
		cout << "cannot find!" << endl;
	}
	else
	{
		cout << "find, the pos is " << pos << endl;
	}
	system("pause");
	return 0;
}


















 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值