天天看点

二级C语言编程练习题的分类汇总-----串的经典问题(‘*’问题)(9)

  • 删除前导*:
void  fun( char *a )
{
	char *t=a;
	while(*t=='*')
	{
		t++;
	}
	while(*t)
	{
		*a=*t;
		a++;
		t++;
	}
	*a='\0';
}
           
  • 删除串中后导*:
void  fun( char *a )
{
	while(*a)
		a++;
	a--;
	while(*a=='*')
		a--;
	*(a+1)='\0';
}
           
  • 删除前后导的*:
void  fun( char *a, int n,int h,int e )//一定要运行才行!!!
{
	int i,j=0;
	for(i=h;i<n-e;i++)
		a[j++]=a[i];
	a[j]='\0';
}
           
  • 删除串中字符间的*:
void  fun( char *a, char *h,char *p )
{
	int i=0;
	char *q=a;
	while(q<h)
	{
		a[i]=*q;
		q++;
		i++;
	}
	while(q<p)
	{
		if(*q!='*')
		{
		a[i]=*q;
		i++;
		}
		q++;
	}
	while(*q)
	{
		a[i]=*q;
		q++;
		i++;
	}
	a[i]='\0';
}
           
  • 仅保留前导*:
void  fun( char *a )
{
	int i=0;
	char *t=a;
	while(*t=='*')
	{
		a[i++]=*t;
		t++;
	}
	while(*t)
	{
		if(*t!='*')
			a[i++]=*t;
		t++;
	}
	a[i]='\0';
}
           
  • 保留串的尾部*:
void  fun( char *a, char *p )
{
	char *t=a;
	for(;t<=p;t++)
		if(*t!='*')
			*(a++)=*t;
	for(;*t!='\0';t++)
		*(a++)=*t;
	*a='\0';
}
           
  • 移动前导*至尾部:
void  fun( char *a )
{
	int n=0,i=0;
	char *t;
	t=a;
	while(*t=='*')
	{
		t++;
		n++;
	}
	while(*t)
	{
		a[i]=*t;
		i++;
		t++;
	}
	while(n)
	{
		a[i]='*';
		i++;
		n--;
	}
	a[i]='\0';
}
           
  • 对于串中前导*的规定:
void  fun( char *a, int  n )
{
int i=0,k=0 ;
char *t,*p;
p=t=a;
while(*t=='*')
{
	t++;
	k++;
}
if(k>n)
{
while(*p)
{
	a[i]=*(p+k-n);
	p++;
	i++;
}
a[i]='\0';
}
}
           
  • 对于串中后导*的规定:
void  fun( char *a,int  n )
{
	int k=0,i=0;
	char *t,*p;
	p=t=a;
	while(*t)
		t++;
	t--;
	while(*t=='*')
	{
		t--;
		k++;
	}
	if(k>n)
	{
		while(*p&&p<t+n+1)
		{
			a[i]=*p;
			i++;
			p++;
		}
		a[i]='\0';
	}
}
           

继续阅读