从字符串中删除指定字符的程序-空格会导致断言失败



我正试图从字符串中删除给定的字符,在大多数情况下,我的代码都在工作,但当我指定"quot;作为字符串,"作为字符,我的断言失败。

#include <stdio.h>
#include <string.h>
#include <assert.h>
void strrem(const char* s1, const char c, char* s2);
int main(void)
{
char str[1000];
strrem("abc", 'b', str); assert(strcmp(str,"ac")==0);
strrem("ABC", 'a', str); assert(strcmp(str,"ABC")==0);
strrem("Hello World!", '!', str); assert(strcmp(str,"Hello World")==0);
strrem("", ' ', str); assert(strcmp(str,"")==0);
return 0;
}
void strrem(const char* s1, const char c, char* s2)
{
int i, j;
int strlngth = strlen(s1);

for (i = 0, j = 0; i < strlngth; i++) {
if(s1[i] != c) {
s2[j++] = s1[i];
}

s2[j] = '';
}
}

与其在每个循环中不断分配nullbyte然后覆盖它,不如在循环之后分配它,这也解决了您的问题(当代码从不循环时,不分配nullbyte(:

#include <stdio.h>
#include <string.h>
#include <assert.h>
void strrem(const char* s1, const char c, char* s2);
int main(void)
{
char str[1000];
strrem("abc", 'b', str); assert(strcmp(str,"ac")==0);
strrem("ABC", 'a', str); assert(strcmp(str,"ABC")==0);
strrem("Hello World!", '!', str); assert(strcmp(str,"Hello World")==0);
strrem("", ' ', str); assert(strcmp(str,"")==0);
return 0;
}
void strrem(const char* s1, const char c, char* s2)
{
int i, j;
int strlngth = strlen(s1);

for (i = 0, j = 0; i < strlngth; i++) {
if(s1[i] != c) {
s2[j++] = s1[i];
}


}
// this is now after the loop
s2[j] = '';
}

最新更新