So the exercise here is to design a program that takes a string and removes all characters in that string that appear in the second string. So with the strings I've chosen below where the first string is abc and the second string is cde I want to get an output of ab
rather than abc
.
I've already seen a very neat way to do this squeeze function that only requires two simple for loops but I was wondering why my long winded way doesn't work.
#include<stdio.h>
void squeeze(char s1[], char s2[]);
void copy(char to[], char from[]);
int k=0;
main()
{
char array1[4]="abc";
char array2[4]="cde";
squeeze(array1, array2);
printf("%s", array1);
}
void squeeze(char s1[], char s2[])
{
int j,i,m;
m=j=i=0;
char s3[1000];
while(s1[i]!='\0') //What I'm doing here is taking a character in the string
{ //and comparing it with all characters in the second string.
copy(s3,s1); //If it exists in the second string I'm 'deleting' that letter
while(s2[j]!='\0') //from the first string. Then I start all over again with the
{ // next letter in line. Or at least that's the plan.
if (s1[i]==s2[j])
{
k=1;
}
++j;
}
if (k==1)
{
m=i;
while(s3[m+1]!='\0')
{
s1[m]=s3[m+1]; //I'm 'deleting' the letter by pushing each character
++m; //that is to the right of the deleted character to the
} //left of the array.
}
if(k!=1)
{
++i;
}
}
s1[i]='\0';
}
void copy(char to[], char from[])
{
int i;
i=0;
while(from[i]!='\0')
{
to[i]= from[i];
++i;
}
to[i]=='\0';
}