# Exercise 2.4 - Compare S1, S2 To Delete Same Character in S1¶

## Question¶

Write an alternative version of squeeze(s1,s2) that deletes each character in s1 that matches any character in the string s2.

```/**
* Exercise 2.4
*
* Let us write a version of squeeze(s1,s2) that deletes each
* character in the string 1 that matches any character in the string s2
*
**/

#include <stdio.h>
#define MAXLINE 1000

int mgetline(char line[], int maxline);
void squeeze(char s1[], char s2[]);

int main(void) {
char s1[MAXLINE], s2[MAXLINE];

putchar('s');
putchar('1');
mgetline(s1, MAXLINE);

putchar('s');
putchar('2');
mgetline(s2, MAXLINE);

squeeze(s1, s2);

printf("%s", s1);

return 0;
}

int mgetline(char s[], int lim) {
int i, c;

for (i = 0; i < lim - 1 && (c = getchar()) != EOF && c != '\n'; ++i)
s[i] = c;

if (c == '\n')
s[i++] = c;

s[i] = '\0';
}

void squeeze(char s1[], char s2[]) {
int i, j, k;
k = 0;

for (i = 0; s1[i] != '\0'; ++i) {
for (j = 0; (s1[i] != s2[j]) && s2[j] != '\0'; ++j)
;
if (s2[j] == '\0')
s1[k++] = s1[i];
}

s1[k] = '\0';
}
```

## Explanation¶

Let’s take the two inputs strings as:

s1: HelloWorld

s2: ol

Our desired output is:

```HeWrd
```

This has removed the characters o and l from the first string. The way squeeze works is, it take each character from the first string and if there is no match found, stores it with a new index k. If there is a match found in s2, it simply skips it. The way it skips is realized by the following:

```for(j=0; (s1[i]!=s2[j]) && s2[j]!='\0' ;++j)
;
if(s2[j]=='\0')
s1[k++] = s1[i];
```

When the match is found s1[i] == s2[j] so our first for loop will end. The second if condtion will fail too as s2 is not iterated till the end, so we do not place the character in s1[k++] and we have successfully skipped it.