我正在尝试创建一个挤压函数,该函数删除字符串s1
中与字符串中任何字符匹配的每个字符s2
。
当我编译时,它并不表示有任何错误,但是由于某种原因没有打印出任何内容。有人可以告诉我我在这里做错了什么吗?
void squeeze(char s1[], char s2[]);
int main() {
char s1[] = "abc";
char s2[] = "cde";
squeeze(s1, s2);
printf("%s\t%s", s1, s2); // nothing is being printed...
}
void squeeze(char s1[], char s2[])
{
int i,j,k;
/* i is original s1 index
* j is s2 index
* k is new s1 index
*/
for (i = k = 0; s1[i] != '0'; i++){
for (j = 0; s2[j] != '0'; j++){
if (s1[i] == s2[j])
s1[k++] = s1[i];
}
}
s1[k] = '\0';
}
上面的代码由于在条件的第二项中放置了'0'而不是'\ 0',因此出现了“分段故障(堆芯被甩)”错误。即使进行了校正,输出对于s1也是“ c”,而不是所需的“ ab”。以下代码给出了s1所需的输出“ ab”。
#include <stdio.h>
char * squeeze(char s1[], char s2[]);
int isCharPresent(char c, char s[]);
int main(int argc, char** argv) {
char s1[] = "abc";
char s2[] = "cde";
char * s = squeeze(s1, s2);
printf("%s\t%s\t%s", s, s1, s2);
return 0;
}
char * squeeze(char s1[], char s2[]) {
int i, k;
char *s = malloc(sizeof (s1));
for (i = k = 0; s1[i] != '\0'; i++) {
if (isCharPresent(s1[i], s2) == 0) {
s[k++] = s1[i];
}
}
return s;
}
int isCharPresent(char c, char s[]) {
int i;
for (i = 0; s[i] != '\0'; ++i) {
if (c == s[i]) {
return 1;
}
}
return 0;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句