如何删除 C 中其他字符串中的字符串?
const char * Cmd = start;more;muchmore;123 45;rest
现在我要从"123 45;"
删除Cmd
。
"123"
可用于标识45
结束后的开头和分号。
因此,在此操作之后,Cmd
应为start;more;muchmore;rest
答案 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"
。