C语言相关(三)

逆制字符串

如:abcdef==>fedcba
思路:使用两个指针分别指向第一个字符和最后一个字符 然后交换位置向中间位置移动 最后完成
代码如下:

void Reverse(char *pbegin,char *pend)
{
	assert(pbegin!=NULL&&pend!=NULL);
	char tmp=0;//用来交换 临时存放
	while(pbegin<pend)
	{
		tmp=*pbegin;
		*pbegin=*pend;
	    *pend=tmp;
		pbegin++;
		*pend--;
	}
}

逆制每个单词(进阶)

输入一个字符串 offer is here 要求输出 here is offer
思路:
待一步:可以调用上面的功能函数 先整体逆制为:ereh si reffo
第二步:再逆制每个单词变为 here is offer
其中第二步可继续调用上面的功能函数遇到空格便移动两个指针到下一个单词的首位
实现如下:

void Reverse(char *pbegin,char *pend)//看到指针要断言
{
	assert(pbegin!=NULL&&pend!=NULL);
	char tmp=0;//用来交换 临时存放
	/*int len=strlen(str);
	*pbegin=str[0];
	*pend=str[len-1];*/
	while(pbegin<pend)
	{
		tmp=*pbegin;
		*pbegin=*pend;
	    *pend=tmp;
		pbegin++;
		*pend--;
	}
}

// here is tulun  先整体逆制 再部分逆制
char *R(char *str)
{
	assert(str!=NULL);
	char*pbegin=str;
	char *pend=str;
	while(*pend!='\0')
	{
		pend++;
	}
	pend--;//不逆制\0

	Reverse(pbegin,pend);
	pbegin=str;
	pend=str;
	while(*pbegin==' ')
	{
		if(*pbegin==' ')//如果前面有空格,跳过
		{
			pbegin++;
			pend++;
		}
		else if(*pend==' '||*pend=='\0')
		{
			Reverse(pbegin,--pend);//pend指到空格之前
			pbegin=++pend;
		}
		else
		{
			pend++;
		}
	}

判断回文

判断一个字符串是否为回文
如:abcdcba为回文
思路:首位设置两个指针中间向中间靠拢 一旦两个指针对应的值不相等 则返回false 否则便为回文

bool IsHuiWen(const char *str)
{
	assert(str!=NULL);
	if(str==NULL||strlen(str)<=0)
	{
		return false;
	}
	int len=strlen(str);
	const char *pbegin=str;
	const char *pend=str;
	while(*pend!='\0')
	{
	pend++;
	}
	pend--;
    while(pbegin<pend)
	{
		if(*pbegin==*pend)
		{
			pbegin++;
			pend--;
		}
		else
		{
		return false;
		}
	}
	return true;
}

二分查找

若能找到则返回mid 不能找到则返回-1;

int Binarserach(int *arr,int len,int key)
{
	int low=0;
	int high=len-1;
	while(low<=high)
	{
		//int mid=(low+high)/2;
		int mid=(low+high)>>1;
		if(arr[mid]==high)
		{
			return mid;
		}
		else if(arr[mid] > key)
		{
			high = mid-1;
		}
		else
		{
			low = mid+1;
		}
	}
	return -1;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值