给定函数功能编写函数实现该功能

该函数实现的功能是:删除字符串中间的*,该字符串只有字母和*
其中h指向字符串第一个字母,p指向最后一个字母,a是给定的字符串
例如字符串为****A**DE***,h指向A的位置,p指向E的位置,结果为
****ADE***
我自己写出来一个但是不知道哪里有问题求解答
void fun(char a, char *h,char *p)
{
char *q;
q=a;
while(*q=='
')
q++;
while(h!=p)
{
if(*h!='*')
{*q=*h;q++;h++;}
else
h++;
}
}

c

3个回答

 #include <stdio.h>
#include <string.h>
#include <malloc.h>

// 将strRes中的t替换为s,替换成功返回1,否则返回0。
int StrReplace(char strRes[],char from[], char to[]) {
    int i,flag = 0;
    char *p,*q,*ts;
    for(i = 0; strRes[i]; ++i) {
        if(strRes[i] == from[0]) {
            p = strRes + i;
            q = from;
            while(*q && (*p++ == *q++));
            if(*q == '\0') {
                ts = (char *)malloc(strlen(strRes) + 1);
                strcpy(ts,p);
                strRes[i] = '\0';
                strcat(strRes,to);
                strcat(strRes,ts);
                free(ts);
                flag = 1;
            }
        }
    }
    return flag;
}

int main() {
    char str[80] = "098123asd098opu";
    printf("替换前:%s\n",str);
    if(StrReplace(str,"098","33210")) printf("替换后:%s\n",str);
    else printf("没有任何替换。\n");
    return 0;
}

给个例子你参考

bianchengxz
bianchengxz 不能用字符串函数
大约 3 年之前 回复

你这个写的乱七八糟的,思路其实很简单,两层循环,先找到第一个字母,然后第一层的内容是保证在第一个字母和最后一个字母里循环即可,第二层是判断,如果是星号的话,就把字符串里的字符前移一位,自己尝试写一下


#include <stdio.h>
#include <memory.h>
#include <stdlib.h>

void fun(char *targetBuf) {
    if (NULL == targetBuf)
    {
        return;
    }
    //"*********A**DB***"

    //1.从左边找到第一个非'*'字符的位置
    char *pTemp = targetBuf;
    while('*' == *pTemp)
    {
        pTemp = pTemp + 1;
    }
    //如果找到字符串结尾都没有字母
    if(strlen(targetBuf) < pTemp - targetBuf + 1)
    {
        printf("字符串里只有 '*', 没有字母\n");
        return;
    }
    //保存第一个字母的指针
    char *pFirstLetter = pTemp;

    //2.从右边找到第一个非'*'字符的位置
    pTemp = targetBuf + strlen(targetBuf) - 1;
    while('*' == *pTemp)
    {
        pTemp = pTemp - 1;
    }
    //保存最后一个字母的指针
    char *pEndLetter = pTemp;
    //如果整个字符串只有一个字母
    if (pFirstLetter == pEndLetter)
    {
        return; //不需要处理
    }

    char *i = NULL;
    char *j = NULL;



    for(i = pFirstLetter + 1 ; i <= pEndLetter; ) {
        if ('*' == *i)   //pFirstLetter右边第一个'*'的位置
        {
            for(j = i; j < pEndLetter; j++)
            {
                *j = *(j + 1);
            }
            *pEndLetter = '*';
            pEndLetter = pEndLetter -1;
            continue;
        }
        i = i + 1;

    }



}

int main() {
    //"*********A**DB***";
    char *a = malloc(strlen("*********A**DB***") + 1);
    sprintf(a, "*********A**DB***");
    printf("%s\n", a);
    fun(a);
    printf("%s\n", a);
    free(a);
    return 0;
}

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐