2021-11-10

#include <assert.h>
负责旋转字符串函数
void leftmove(char* left,char* right)
{
	assert(right != NULL);
	assert(left != NULL);
	while(left < right)
	{
		char tmp =*left;
		*left = *right;
		*right = tmp;
		left++;
		right--;
	}
}
负责调用旋转,ab  cdefg  先旋转ab再旋转cdefg再总体旋转。有些范围还是要细心一点
void cmd(char* arr, int k)
{
	assert(arr);
	int len = strlen(arr);
	assert(k < len);
		leftmove(arr, arr + k - 1);
		leftmove(arr + k, arr + len - 1);
		leftmove(arr, arr + len - 1);
}
字符串有多少个字母就有多少种可能性
一一列举出来和第二个数组比较,判断是否为第一个字符串逆序得来
int left_move(char* p1, char* p2)
{
	int len = strlen(p1);
	int i = 0;
	for (i = 0; i < len - 1; ++i)
	{
			cmd(p1,1);
			int ret = strcmp(p1, p2);
		if (ret == 0)
			return 1;
	}
	return 0;
}
int main()
{
	char arr[] = "abcdefg";
	char ff[] = "cdefgab";
	int ret = 0;
	ret = left_move(arr, ff);
	if (ret == 1)
		printf("tes\n");
	else
		printf("no\n");
	return 0;

}

不使用临时变量求字符串长度
计数器,指针地址相减,都要用到临时产量

int my_strlen(char* p1)//不使用临时变量求字符串长度
{
	if(!(*p1))
		return 0;
	return 1 + my_strlen(p1+1);
}

没想到一个递归就搞定了☺

练习的复制函数

char* my_strncpy(char* p1, const char* p2, int count)
{
	char* ret = p1;
	while (count &&(*p1++ = *p2++))
	{
		count--;
	}
	if (count)
		while (--count)
			*p1++ = "\0";
	return ret;

}

用到了短路效应,字符串长度不够会补\0

字符追加strncat

char* my_strcat(char* p1, const char* p2, int count)
{
	char* ret = p1;
	while (*p1)
	{
		++p1;
	}
	while (count--)
		if (!(*p1++ = *p2++))
			return ret;
	*p1 = '\0';
	return ret;
}

当穿进去的数字大于字符串长度不会补\0,直接return 跑了。
输入数字不大于字符串长度会自动补一个\0
p1++在循环条件判断结束之后还会加一指向下一个位置

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值