我需要从主电源字符串中删除子字符串"hello"
,现在我已将'x'
替换为'ks'
,将'z'
替换为'ts'
,因为我的作业被要求我要做的。但现在我想不出一种方法来删除子串"hello"
,我已经尝试使用memmove()
,但之后printf打印"(null)"
。
我的代码:
#include <stdio.h>
#include <string.h>
void antikorso(char *dest, const char *src) {
const char *p = src;
int i;
for (i = 0; *p != '\0'; i++, p++)
{
if (*p == 'x') {
dest[i++] = 'k';
dest[i] = 's';
}
else if (*p == 'z') {
dest[i++] = 't';
dest[i] = 's';
}
else
{
dest[i] = *p;
}
}
dest[i] = '\0';
printf("\n%s", dest);
char c[10] = "hello";
int j;
while (dest = strstr(dest, c))
memmove(dest, dest + strlen(c), 1 + strlen(dest + strlen(c)));
printf("\n%s", dest);
}
int main(void)
{
const char *lol = "yxi izexeen hello asd hello asd";
char asd[1000];
antikorso(asd, lol);
}
答案 0 :(得分:1)
你身边的逻辑错误。它会打印NULL
,因为在您删除了"hello"
后,条件就会出现
while
循环再次被评估,这导致:
dest = strstr(dest, c);
最终会将NULL
分配给dest
,这就是您打印的内容。你需要
另一个记住原始字符串的变量。
char *original = dest;
char c[10] = "hello";
while (dest = strstr(dest, c))
memmove(dest, dest + strlen(c), 1 + strlen(dest + strlen(c)));
printf("\n%s", original);
这将打印出没有"hello"
s。