C语言库函数

size_t Strlen(const char* str) {
	//检验合法性
	assert(str != NULL);
	size_t count = 0;
	while (str[count] != '\0') {
		count++;
	}
	return count;
}
char* str(char* dest, const* src) {
	assert(dest != NULL);
	assert(src != NULL);
		int64_t i = 0;
	for (; src[i] != '\0'; ++i) {
		dest[i] = src[i];
}
	dest[i] = '/0';
	return dest;
}
char* Strcat(char* dest, char* src) {
	assert(dest != NULL);
	assert(src != NULL);
	//找到dest的末尾
	int64_t end = 0;
	/*while (dest[end] != '\0') {
		end++;
	}*/
	for (; dest[end] != '\0'; ++end); 
	//拼接
	int64_t cur = 0;
	for (; cur != '\0'; ++cur,++end) {
		dest[end] = src[cur];
	}
	dest[end] = '\0';
	//Strcpy(&dest[end], src);
	return dest;
}
int Strcmp(const char* str1, const char* str2) {
	assert(str1 != '\0');
	assert(str2 != '\0');
	while (*str1!='\0'&&*str2!='\0')
	{
		if (*str1 < *str2) {
			return -1;
		}
		else if (*str1 > *str2) {
			return 1;
		}
		else
		{
			str1++;
			str2++;
		}
	}
	if (*str1 < *str2) {
		return -1;
	}
	else if (*str1 > *str2) {
		return 1;
	}
	else
	{
		return 0;
	}
}
char* Strncpy(char* dest, char* src ,size_t num) {
	assert(dest != NULL);
	assert(src != NULL);
	for (int i = 0; i < num; ++i) {
		if (src[i] != '\0') {
			dest[i] = src[i];
		}
	}
	return dest;
}
const char* Strstr(const char* str1, const char* str2) {
  const char* p1 = str1;
  const char* p2 = str2;
  const char* pos;
  //判断是不是空字符串
  if (*str2 == '\0') {
	  return NULL;
  }
	while (*p1!='/0')
	{
		pos = p1;
		p2 = str2;
		//当前字符相等那么
	while (*p2 != '\0'&& *pos!='\0'
		             &&(*pos == *p2)) {
					pos++;
					p2++;
			}
			if (*p2 == '/0') {
				return p1;
			}
		//不相等的时候指针p1向后移动一位
		//p2返回原点
			p1++;
	}
	      return NULL;
}
int Strtok(char* input, const char* split_char, char* output[]) {
	int output_index = 0;
	char* p = strtok(NULL, split_char);
	while (p != NULL) {
		output[output_index] = p;
		++output_index;
		p = strtok(NULL, split_char);
	}
	return output_index;
}
int Tolower(int c) {
	if (c >= 'A'&&c <= 'Z') {
		c += 'a' - 'A';
		return c;
	}
	return c;
}
void Memcpy(void* dest[], void* src[],size_t num) {
	char* p_dest = (char*)dest;
	char* p_src = (char*)src;
	for (int i = 0; i < num; ++i) {
		p_dest[i] = p_src[i];
	}
	//考虑内存覆盖缓冲区重合
}
void Memcpy(void* dest[], void* src[], size_t num) {
	assert(dest != NULL);
	assert(src != NULL);
	char* p_dest = (char*)dest;
	char* p_src = (char*)src;
	if ((p_dest>p_src && p_dest<num+p_src) {
		for (int i = num-1; i >= 0; --i) {
			p_dest[i] = p_src[i];
		}
	}
	else {
		Memcpy(dest, src, num);
	}
	return dest;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值