O了个cean
2021-05-25 21:39
采纳率: 50%
浏览 36

c语言 一个指针相关问题

学校的一个习题,我自己验证无误,但过不了学校的考试系统。

题目如下:

假定输入的字符串中只包含字母和号。请编写函数fun,它的功能是: 除了字符串前导和尾部的号之外, 将串中其他*号全部删除。形参h已指向字符串中第一个字母,形参p已指向字符串中最后一个字母。在编写函数时,不得使用C语言提供的字符串函数。

在编写函数时,不得使用C语言提供的字符串函数。

注意: 部分源程序在文件PROG1.C文件中。

主函数可任意改动,仅在函数fun的花括号中填入你编写的若干语句。

#include <stdio.h>
#include <conio.h>
void  fun( char *a, char *h,char *p )
{
//--ksstart(注释不能删除)—
//考生代码从此开始编写
    int i=0,j;
    while(h[i]!=p[0]){
        if(h[i]=='*'){
        	//当数组中间出现*时,删除后要产生如下三种变化 
            j=i;
            p--;
            //一·数据末尾指针p向前移动一位 
            while(h[j]!='\0'){
            	h[j]=h[j+1];
            	//二·所有数据向前移动一位 
            	j++;
				}
        }
        else{
        	i++;
        	//三·控制操作的循环数i需要不变
					//即只有h[i]!='*'时,i才正常进位 
				}
    }
//--ksend---
}
int main()
{ 
	//自己编写main()
	char a[]={"***a*bc***d*ef****"};
	char *h,*p;
	h = &a[3];
	p = &a[13];
	fun(a,h,p);
	printf("%s",a);
	return 0; 
}
  • 写回答
  • 好问题 提建议
  • 追加酬金
  • 关注问题
  • 收藏
  • 邀请回答

3条回答 默认 最新

  • benbenli 2021-05-26 11:52
    已采纳

    去掉了下标,全用指针。

    #include <stdio.h>
    
    void  fun( char *a, char *h, char *p)
    {
        //--ksstart(注释不能删除)—
        //考生代码从此开始编写
        // 跳过尾部的星号
        while (p > h && *p == '*')
            --p;
    
        while (h < p){
            if (*h == '*') {
                //当数组中间出现*时,删除后要产生如下三种变化 
                //一·数据末尾指针p向前移动一位 
                p--;
                
                //二·所有数据向前移动一位 
                for (char* q = h; *q != '\0'; ++q){
                    *q = *(q + 1);
                }
            }
            else {
                //三·控制操作的循环数
                ++h;
            }
        }
    //--ksend---
    }
    
    int main()
    { 
        //自己编写main()
        char a[] = {"***a*bc***d*ef****"};
        char *h, *p;
        h = &a[3];
        p = &a[13];
        fun(a, h, p);
        printf("%s\n", a);
        
        char b[] = {"***a*f****"};
        h = &b[3];
        p = &b[5];
        fun(b, h, p);
        printf("%s\n", b);
        
        return 0; 
    }
    
    // Output
    ***abcdef****
    ***af****
    
    评论
    解决 无用
    打赏 举报
  • 查看更多回答(2条)

相关推荐 更多相似问题