其中一個問題是您的複製邏輯。
當字符不同時,您不會將其複製到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
起始地址的備份。 while
循環將繼續,而當前的a
字符不是\0
(您可以將其讀取爲while (*a != '\0')
)。條件也很簡單。複製部分是我之前談到的。
我們只會增加b
字符串如果我們複製一些東西,否則它的引用保持不變。該過程將繼續,直到循環找到a
字符串中的\0
終止字符。
輸出:
[ ~/src/test ] $ ./filter "Stack Overflow Questions" e
Stack Ovrflow Qustions
[ ~/src/test ] $ ./filter "Stack Overflow Questions" S
tack Overflow Questions
[ ~/src/test ] $ ./filter "Stack Overflow Questions" s
Stack Overflow Quetion
[ ~/src/test ] $ ./filter "aaa bbb ccc abc cba" a
bbb ccc bc cb
[ ~/src/test ] $ ./filter "aaa bbb ccc abc cba" b
aaa ccc ac ca
[ ~/src/test ] $ ./filter "aaa bbb ccc abc cba" c
aaa bbb ab ba
[ ~/src/test ] $
這清理了很多,非常感謝。 –
@PaulRoub噢,謝謝! –