Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
oorrja
GitHub Repository: oorrja/learntosolveit
Path: blob/master/source/cprogramming/Ex_2.4_squeezess.rst
1241 views
============================================================
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.

.. literalinclude:: ../../languages/cprogs/Ex_2.4_squeezess.c
   :language: c
   :tab-width: 4

.. runcode:: ../../languages/cprogs/Ex_2.4_squeezess.c
   :language: c
   :codesite: ideone

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.



.. seealso::

   * :c-suggest-improve:`Ex_2.4_squeezess.c`
   * :c-better-explain:`Ex_2.4_squeezess.rst`