所以下面是一个函数,它应该从字符串中过滤掉给定的字符ch,并将过滤后的版本放在结果中。 底部的 put 语句最终会输出与原始字符串相同的字符串,而不考虑过滤的字符,结果最终为空。
void filter_ch_index(char string[], char result[], char ch) {
result[0] = NUL ; // placeholder
int i;
for(i = 0; i < strlen(string); i++)
{
if(string[i] != ch)
{
result[i] = string[i];
}
}
puts(result);
}
问题之一是你的复制逻辑。
当字符不同时,您不会将其复制到result
中,但无论如何都会递增i
。这会在result
弦上留下孔洞。要解决这个问题,您可以使用指针(引用和增量)。
我看到的另一个问题是你如何调用函数。是否为两者分配了足够的内存空间?
我将放置一个非常不安全的函数实现来展示如何做到这一点。应修改函数以考虑字符串大小。
#include <stdio.h>
void filter(char *a, char *b, char c)
{
char *aux = b;
while(*a) {
if(*a != c) *b++ = *a;
a++;
}
*b = 0x0; // thx to @PaulRoub for pointing it out
puts(aux);
}
int main(int argc, char *argv[])
{
char buffer[100];
if(argc < 3) {
printf("Usage: %s <string> <character>n", argv[0]);
return 0;
}
filter(argv[1], buffer, argv[2][0]);
return 0;
}
在上面的代码中,aux
充当 b
起始地址的备份。当当前a
字符未