如何删除C中的子字符串

时间:2015-09-01 07:20:49

标签: c string

如何删除 C 中其他字符串中的字符串?

 const char *   Cmd = start;more;muchmore;123 45;rest

现在我要从"123 45;"删除Cmd

"123"可用于标识45结束后的开头和分号。

因此,在此操作之后,Cmd应为start;more;muchmore;rest

5 个答案:

答案 0 :(得分:3)

  

因此,在此操作之后,Cmd应为start;more;muchmore;rest

声明你现在拥有的东西,你可以做到。

const char *   Cmd = start;more;muchmore;123 45;rest  // missing "" in this

Cmd被声明为const,因此Cmd[0]='A';之类的任何内容都无法完成。

答案 1 :(得分:1)

快速且脏的未经测试的非错误检查代码:

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

void main()
{
    char Cmd[] = "start;more;muchmore;123 45;rest";
    char toberemoved[] = "123 45;";

    /* get pointer to start of string to be removed*/
    char *start = strstr(Cmd, toberemoved);

    /* get pointer to end of string to be removed*/
    char *end = start + strlen(toberemoved);

    /* move rest of string to former start of string to be removed*/
    memmove(start, start + strlen(toberemoved), strlen(end) + 1);
}

答案 2 :(得分:1)

像这样:

left

答案 3 :(得分:0)

与此同时,我解决了这个问题。不好,但我的工作: - )

    int laengeGesamt = strlen(Cmd );

    char *rest = strstr(Cmd , "123");
    char tempRest[100];
    strcpy (tempRest, rest);
    int laengeRest = strlen(tempRest);

    int laengeNeed = laengeGesamt - laengeRest;

    char need[100];
    strncpy(need,Cmd ,laengeNeed);
    need[laengeNeed]='\0'; 

    strcat(need,"rest"); 

    Cmd = need; 

答案 4 :(得分:0)

类似于Jabberwocky的回答,但是您可以在最后一步中使用“ strcpy”。

#include <stdio.h>
#include <string.h>
void main(void)
{
    char Cmd[] = "start;more;muchmore;123 45;rest";
    char removed[] = "123 45;";

    /* get pointer to start of string to be removed*/
    char *start = strstr(Cmd, removed);

    /* get pointer to end of string to be removed*/
    char *end = start + strlen(removed);

    /* remove string "123 45;" from Cmd */
    strcpy(start, end);

    /* will print: start;more;muchmore;rest */
    printf("%s\n", Cmd);
}

strcpy(start, end)发生了什么事?

strcpy(start, end)会将end复制到地址start指向的地址,在这种情况下,start指向Cmd中的'1',而end指向到“ r”(休息的第一个字符)。

因此strcpy(start, end)会将"rest\0"'\0'是字符串终止符)复制到"123 45;rest"所在的位置。然后start将变成"rest",结果Cmd将变成"start;more;muchmore;rest"