华为机试-删除字符串中所有给定的子串

这是用c语言实现的,代码经过编译,测试通过。
这个程序主要用到对指针的操作,以及memset ,memcpy的用法;关于这两个函数的用法,前一篇文章中已经给出。
我在编程时遇到的问题和出现的错误在程序后给出

#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <string.h>


int delete_sub_str(const char *str,const char *substr,char *result)
{

    const char *p,*q;
    //char *q;
    char *temp,*t;
    p = str;
    q = substr;
    int n,count = 0;
    n = strlen(q);
    temp = (char*)malloc(n+1);

    memset(temp,0x00,n+1);

t = result;

    while(*p)
    {
        memcpy(temp,p,n);

        if(strcmp(temp,q)==0)
        {
            count++;
            memset(temp,0x00,n+1);
            p = p + n;
        }
        else
        {
            *t = *p;
            p++;
            t++;
            memset(temp,0x00,n+1);
        }
    }

    free(temp);
    return count;

}

int main()
{
    char s[100] = {'\0'};
    int num = delete_sub_str("123abc12de234fg1hi34j123k","123",s);
    printf("The number of sub_str is %d\r\n",num);
    printf("The result string is %s\r\n",s);
}

我编程时问题:
一、就是一开始*p和*q指针定义成了

char *p,*q;

这时候系统报错如下:
cannot convert from ‘const char ’ to ‘char
也就是我函数定义中为const char*,它和char*不能相互转化。
所以应改成

const char *p,*q;

二、就是在运用memset 和memcpy时,

memset(temp,0x00,n+1);

一开始把逗号写成了分号

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值