- 压缩字符串
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;
}