用c从字符串中删除一些白色空间



首先我的代码打印了yksi itsekseen lol,现在它打印了yksiitsekseenlol,我正在尝试打印yksi itsekseen lol。在第一个,有两个,第二个没有,我试图在单词之间只有一个空间。

我的代码:

#include <stdio.h>
#include <string.h>
void antikorso(char *dest, const char *src) {
    const char *p = src;
    int i;
    for (i = 0; *p != ''; 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] = '';
    char *original = dest;
    char c[10] = "hello";
    while (dest = strstr(dest, c)) {
        memmove(dest, dest + strlen(c), 1 + strlen(dest + strlen(c)));
    }
    char *nat = original;
    char b[20] = "asd";
    while (dest = strstr(original, b)) {
        memmove(dest, dest + strlen(b), 1 + strlen(dest + strlen(b)));
    }
    printf("n%s", nat);
    char *vit = nat;
    char d[10] = "  ";
    while (dest = strstr(nat, d)) {
        memmove(dest, dest + strlen(d), 1 + strlen(dest + strlen(d)));
    }
    printf("n%s", vit);
    return vit;
    }

int main(void)
    {
    const char *lol = "hello yxi asd izexeen hello lol";
    char asd[10000];
    antikorso(asd, lol);
    }

好吧,所以您几乎拥有它,我想,更改

memmove(dest, dest + strlen(c), 1 + strlen(dest + strlen(c)));

to

memmove(dest, dest + strlen(c) - 1, 1 + strlen(dest + strlen(c)));

我认为这会做到。该代码以前跳过了两个空间,因此,如果您将其退回一个位置,则应在副本中包含一个空间。

无论如何,应该可以将两个空间倒入一个空间。您应该测试如果您连续三个空间最终会发生什么。

最新更新