2016-10-22 56 views
1

我试图创建一个挤压函数,删除字符串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'; 
} 
+1

'!='\ 0''就是你想要的。 “0”是数字零,而不是nul终止符。 – user3386109

+1

我弄脏你的意思是在循环中使用''\ 0''而不是''0''。你的程序可能崩溃了。 –

+0

谢谢你做了这个诀窍:) – ALKI

回答

1

上面的代码给出“分段故障(核心转储)”错误在用于状态的第二项是由于“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; 
} 
相关问题