如何解决从字符串中删除指定字符的程序-空白导致断言失败
我正在尝试从字符串中删除给定的字符,并且大部分情况下我的代码都在工作,但是当我将“”指定为字符串而将''指定为字符时,我的断言将失败。
#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',"ABC")==0);
strrem("Hello World!",'!',"Hello World")==0);
strrem("",' ',"")==0);
return 0;
}
void strrem(const char* s1,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] = '\0';
}
}
解决方法
与其在每个循环中不断分配空字节然后覆盖它,不如在循环之后分配它,这还解决了您的问题(当您的代码永不循环时,不分配空字节):
#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',"ABC")==0);
strrem("Hello World!",'!',"Hello World")==0);
strrem("",' ',"")==0);
return 0;
}
void strrem(const char* s1,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] = '\0';
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。