今天在群里看见有一个人问题,然后给出如下三种解法。
- 方法1:
#include<iostream>
using namespace std;
void fun(char *p)
{
char *s=p,*r=p;
int flag=strlen(p);
for(int a=0;a<flag;a++)
{
//如果满足奇数条件
if(*p%2==1&&a%2==1)
{
p++;
s++;
r=p;//r始终跟踪p的最新正确的位置
}
else
{
while(*s!='\0')
{
*p++=*++s;
}
*s='\0';
}
p=s=r;// p跟s要重新得到正确的地址
}
}
int main()
{
char s[13]="ABCDEFG12345";
fun(s);
puts(s);
return 0;
}
方法2:
#include<iostream>
using namespace std;
void fun(char *p)
{
int flag=strlen(p);
for(int a=0;a<flag;a++)
{
//如果满足奇数条件
if(*p%2!=0&&a%2!=0)
{
p++;
}
else
{
*p++='@';
}
}
}
int main()
{
char s[13]="ABCDEFG12345";
fun(s);
for(int a=0;a<strlen(s);a++)
if(s[a]!='@')
printf("%c",s[a]);
return 0;
}
方法3:
#include<iostream>
using namespace std;
void fun(char *p,char *s)
{
int flag=strlen(p),num=0;
for(int a=0;a<flag;a++)
{
//如果满足奇数条件
if(*p%2==1&&a%2==1)
{
s[num++]=*p++;
}
else
{
p++;
}
}
}
int main()
{
char p[13]="ABCDEFG12345";
char s[13]={0};
fun(p,s);
puts(s);
return 0;
}