c - 试图从标准C中的字符串A中删除字符串B的字符
问题描述
因此,如果A =“a B c D e F g”和B =“ BDF ”,则输出应为“aceg”。
我的想法是逐一检查A的字符是否与B的任何字符相等(A [0] vs B [0]/ B [1]... B [n] 等等)。因此,如果它们不匹配,则增加一个计数器变量。如果计数器小于B的长度,则删除该字符,当计数器等于B的长度时,该字符将移动到另一个字符串中。
我的版本看起来像这样,但不起作用:
void remove_characters(char s[], char r[])
{
int k, i, j, l = 0;
char s_copy[20];
for (i = 0; s[i] != '\0'; i++){
for (j = 0; r[j] != '\0'; j++)
if (s[i] != r[j])
k++;
if (k = strlen(r)){
s_copy[l++] = s[i];
k = 0;
}
}
puts(s_copy);
}
void main()
{
char s1[20],s2[20];
printf("Enter the first string: ");
gets(s1);
printf("Enter the second string: ");
gets(s2);
remove_characters(s1,s2);
}
任何想法问题出在哪里?
解决方案
任何想法问题出在哪里?
不止一个。
- UnholySheep 提到
if (k = strlen(r))
;你的意思是==
而不是=
。 k
使用前未初始化;这是在内部循环之前完成的。s_copy
不是空终止的。
这是一个利用标准函数strchr
和修改的替代实现s
,它的优点是对 的长度没有限制,s
并且结果对调用者可用,而不仅仅是打印:
void remove_characters(char s[], char r[])
{
char *t = s;
do if (*s && strchr(r, *s)) continue;
else *t++ = *s;
while (*s++);
}
推荐阅读
- javascript - 如何从 SparkAR 中的 lastValue 中删除警告
- docker - Shopware 6 Docker 设置添加 PHPMyAdmin
- javascript - 在 Microsoft Teams 选项卡中对用户进行身份验证 getContext 说明
- vba - 鼠标单击后无法更改活动文本框并设置焦点
- python - 如果使用 prefetch_related django,则为空 M2M 数据
- android - 图像在 Cardvew 中时不显示
- java - Spring StateMachine 可重用状态机实例
- angular - 有没有办法通过点击 ag-grid 中的扩展箭头将 agGroupCellRenderer 参数传递给自定义组件?
- email - 以 png 内嵌图像的形式发送电子邮件是否会增加我的隐私和抵抗被监视的能力?
- javascript - UnhandledPromiseRejectionWarning:TypeError:无法读取未定义的属性“hasPermission”