二级C字符串*删除操作
1.将字符串前导*号移动到字符串尾部
如:****A*BC*DEF*G**** ->A*BC*DEF*G********
void fun(char *a)
{
int i=0,n=0; //"*"号统计器n赋初始值0
char *p;
p=a; //工作指针p指向字符串s
while(*p=='*')//循环统计前导"*"号数目n
{
n++;
p++;//字符串没变,只是地址增加
}
while(*p) //截取"*"号字符(此时的p为去掉前*号的)
{
a[i]=*p;
i++;
p++;
}
while(n!=0) //在串尾开始添加n个"*"号
{
a[i]='*';
i++;
n--;
}
a[i]='\0';
}
main()
{char s[81]; int n=0;
printf("Enter a string:\n");gets(s);
fun(s);
printf("The string after moveing:\n");puts(s);
}
2.将字符串中的前导*号全部删除,中间和后面的*号不删除。
如:****A*BC*DEF*G*******->A*BC*DEF*G*******。
#include <stdio.h>
void fun( char *a )
{
char *p=a;
while(*p=='*') p++; /*指针p指向字符串第一个字母*/
for(;*p!='\0';p++,a++)
*a=*p;/*从第一个字母开始,其后的字符都放入指针a所指的字符串中(字符串没变,只是地址增加)*/
*a='\0';/*在字符串最后加上结束标记符*/
}
main()
{ char s[81];
printf("Enter a string:\n");gets(s);
fun( s );
printf("The string after deleted:\n");puts(s);}
3.将字符串尾部的*号全部删除,前面和中间的*号不删除。
c 字符串截取如:****A*BC*DEF*G*******->****A*BC*DEF*G。
#include <stdio.h>
void fun( char *a )
{
while(*a!='\0')a++;
a--;
while(*a=='*')a--;
*(a+1)='\0';
}
main()
{ char s[81];
printf("Enter a string:\n");gets(s);
fun( s );
printf("The string after deleted:\n");puts(s);
}
4.除了字符串前导的*号之外,将串中其它*号全部删除。
如:****A*BC*DEF*G*******->****ABCDEFG。
#include <stdio.h>
void fun( char *a )
{
/*以下代码仅供参考 */
int i=0,k;
while(a[i]=='*') i++;
k=i;
while(a[i]!='\0')/*以下程序段实现非*字符前移 */
{
if(a[i] != '*')
a[k++] = a[i];
i++;
}
a[k]='\0';
}
main()
{ char s[81];
printf("Enter a string:\n");gets(s);
fun( s );
printf("The string after deleted:\n");puts(s);
}
5.除了尾部的*号之外,将字符串中其它*号全部删除。形参p已指向字符串中最后的一个字母。
如:****A*BC*DEF*G*******->ABCDEFG*******。
#include <stdio.h>
void fun(char *a, char *p)
{
char *q=a;
int j=0;
while(*q&&q<p){
if(*q !='*')a[j++]=*q;
q++;
}
while(*p)a[j++]=*p++;//或者(a[j++]=*p;p++)
a[j]='\0';
}
main()
{char s[81],*t;
printf("Enter a string:\n");gets(s);
t=s;
while(*t)t++;
t--;
while(*t=='*')t--;
fun(s , t);
printf("The string after deleted:\n");puts(s);
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论