我使用以下命令从变量中删除空格
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,这会跳过字符。同样,原始文件正在写入位置测试一个空间,而不是在读取位置测试(我测试了写入位置,但是它是在从读取位置复制字符之后进行的,因此结果是正确的)。