将字符串中的前导*号全部删除,中间和尾部的*号不删除

国二题目:
规定输入的字符串中只包含字母和号。请编写函数fun,它的功能是:将字符串中的前导号全部删除,中间和尾部的*号不删除。
例如,字符串中的内容为:*******A*Bc*DEF*G,删除后,字符串中的内容应当是:A*Bc*DEF*G在编写函数时,不得使用C语言提供的字符串函数。
注意:部分源程序给出如下。

分析:
1.注意,s[]是数组,而不是指针,在操作时需要注意一下
2.只需要删除开头的*号,其它的部分不需要删除
3.合法性检查,如果不是合法字符串,需要提示错误信息
4.注意:如果开头的*号下一个元素不是星号,注意保留

代码如下:

/*

规定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:将字符串中的前导*号全部删除,中间和尾部的*号不删除。
例如,字符串中的内容为:*******A*Bc*DEF*G****,删除后,字符串中的内容应当是:A*Bc*DEF*G****在编写函数时,不得使用C语言提供的字符串函数。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在fun函数的花括号中填入所编写的若干语句。

*/
#include <stdio.h>
#include <string.h>
void  fun( char *a )
{
    char *p;
    int len;
    int i;
    p=a;
    len=strlen(a);   // 求字符串长度
    for(i=0;i<len;i++)
    {
        if((a[i]!='*') && (a[i]<'A'|| a[i]>'Z') && (a[i]<'a'|| a[i]>'z'))   //  字符串合法性检查   
        {
            printf("输入的数组格式不对!\n");
            return;
        }
    }
    for(i=0;i<len;i++)
    {
        if('*' == a[i]) //  查找开头属于*的字符串
        {
            p++;    //  如果一直是*号,指针p跳到下一个
            if(a[i+1]!='*') //  判断数组的下一个元素是不是*号
            {
                break;
            }
        }
    }
    i=0;
    while(*p!='\0')     //  将数组a通过指针p来改变,重新赋值。去除开头的*号部分
    {
        a[i]=*p;
        p++;
        i++;
    }
    a[i]='\0';  //  最后要加上结束符

}
void main()
{ 
    char  s[81];
    printf("Enter a string:\n");
    gets(s);
    fun(s);
    printf("The string after deleted:\n");
    puts(s);
}


结果为:
这里写图片描述

建议大家注意分析题意。

  • 14
    点赞
  • 67
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小材大用

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值