我正在尝试编写一个函数来删除字符串中的空格,我知道我的问题是即使将下一个字符移动到空格所在的位置后,我仍然在其原始位置复制该字符(我重复一个字符两次)。我不太确定如何摆脱那个重复的角色。 (即我有“Hello world.”,但我的函数给了我“Hellowworld.”)
void deblank(char str1[], char str2[])
{
int i, x;
for (i = 0; str1[i] != '\0'; i++)
{
if (str1[i] == ' ')
{
x = i + 1;
str2[i] = str1[x];
}
else
{
str2[i] = str1[i];
}
}
str2[i] = '\0';
}
最佳答案
现在,您只有一个索引,i
.
你真的想要两个索引,称它们为 i
和 j
. i
将是您对源字符串的索引。 j
将是您在目标字符串中的索引。
您将像现在一样遍历源字符串,递增 i
在每次迭代中。当源中有非空格字符时,您会将其复制到目标,并增加目标索引。
当源中有空格时,您不会将其复制到目标或增加目标索引。
通常这看起来像:
size_t j = 0;
for (i=0; input[i]; i++)
if (input[i] != ' ')
output[j++] = input[i];
output[j] = '\0';
是的,我会使用类似 input
的东西和 output
或 source
和 dest
而不是 str1
和 str2
.后者没有指示您从/复制到哪个。
我还建议使用 isspace
来自 <ctype.h>
而不是直接与空格字符进行比较,除非你真的只想消除空格字符,但保留其他空白(制表符、回车符、换行符、垂直制表符等)
关于c - 如何去掉字符串中的空格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16975943/