我使用以下命令从变量中删除空格

        for (i=0, ptr=lpsz;ptr[i];ptr++)
        {
            if (*ptr == ' ')
                i++;

            *ptr = ptr[i];
        }
        *ptr=0;


但是,如果有多个空间,似乎有问题,我不确定自己在做什么错。谁能帮我吗?

最佳答案

这应该工作。考虑两个指针在字符串中移动要比一个指针加一个偏移量容易得多。

auto sptr = lpsz;
auto dptr = lpsz;
while (*dptr = *sptr) { // copy up to and including terminating NUL
    if (*dptr != ' ') dptr++; // but spaces take no slots in the destination
    sptr++;
}



演示:http://ideone.com/Pmmc20


甚至

auto sptr = lpsz;
auto dptr = lpsz;
while (auto c = *dptr = *sptr) {
    dptr += (c != ' ');
    sptr++;
}


此代码与原始代码之间的本质区别在于,当我们看到除空间以外的其他内容时,我的和原始代码都会将读取和写入位置向前移动。但是,当我们看到一个空格时,我将读取位置向前移动1而不将写入位置移动,而原件将读取位置向前移动2并将写入位置向前移动1,这会跳过字符。同样,原始文件正在写入位置测试一个空间,而不是在读取位置测试(我测试了写入位置,但是它是在从读取位置复制字符之后进行的,因此结果是正确的)。

09-07 04:21