练习:压缩字符串和逆序英文语句

  1. 压缩字符串
    aaaabbbbcdefffffghhhh
    压缩成a4b4cdef4gh4
// 压缩字符串
// aaaabbbbcdefffffghhhh
// a4b4cdef4gh4
#include <stdio.h>
void yasuo();
void yasuo(char *pStr)
{

	int len=0;
	if(pStr==NULL)
		return ;
	char *p1=pStr;
	//char *p2=pStr;
	while(*p1++)
	{
		len++;
	}
	int i,j;
	p1=pStr;
	char *p2=pStr;
	for(i=0,j=0;i<len;i++)
	{
		int count=1;
		while(p1[i]==p1[i+1])
		{
			count++;
			i++;
		}
		if(count>1)
		{
			p2[j++]=p1[i];
			
			p2[j]=count+'0';//将count转换成字符
			j++;
		}
		else 
		{
			p2[j]=p1[i];
			j++;
			
		}
	
	}
	p2[j]='\0';
	int len2=0;
	printf("%s\n",p2);
	
}
int main()
{
	char str1[]="aaaabbbcddddeffeeegghjjjj";
	yasuo(str1);
	
	return 0;
}

利用两个指针来解决 一个进行遍历一个进行替换。
2: 单词逆序
You are from shanghai
shanghai from are You

实质是先将所有元素逆序再对单个单词进行逆序,关键在于用指针记录判断边界值,注意使用逆序函数的开始和结束位。

#include <stdio.h>
int strLen();
int strLen(char *pStr)
{
	if(pStr == NULL)
		return -1;
	int len=0;
	while(*(pStr++))
	{	
		len++;
	}
	return len;
}
void reverse();
void reverse(char *pStr,int k,int e)
{
	int tmp;
	//int left=0;
	//int right=strLen(pStr)-1;
	while(k<e)
	{
		tmp=pStr[k];
		pStr[k]=pStr[e];
		pStr[e]=tmp;
		k++;
		e--;
	}
	
}
void reEnglish();
void reEnglish(char *pStr)
{
	if(pStr == NULL)
		return ;
	char *p1=pStr;
	int len = strLen(pStr);
	reverse(p1,0,len-1);
	char *p2=p1;
	//char *p3=p2;
	int kai=0;
	int jie=0;
	int i;
	for(i=0;i<len;i++)
	{
		if(p2[i]!=' ')
		{
			jie++;
		}
		else
		{
			jie++;
			reverse(p2,kai,jie-2);
			printf("p2=====%s\n",p2);
			kai=jie;
		}
	}
	reverse(p2,kai,jie-1);
	printf("p2=====%s\n",p2);
	pStr=p2;

	
}
int main()
{
	char str[100]="I am from shanghai";
	
	int len = strLen(str);
	//printf("len =%d\n",len);
	//reverse(str);
	printf("%s\n",str);
	//reverse(str,0,len-1);
	//printf("%s\n",str);
	reEnglish(str);
	printf("%s\n",str);
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值