How to replace two chars with one char?
You can just shuffle it over one spot using a generic "move back" function:
void shunt(char* dest, char* src) {
while (*dest) {
*dest = *src;
++dest;
++src;
}
}
Where you can use it like this:
int main(){
char str[] = "Hi this is Mark cc Alice";
for (int i = 0; str[i]; ++i) {
if (str[i] == 'c' && str[i+1] == 'c') {
str[i]='&';
shunt(&str[i+1], &str[i+2]);
}
}
printf("\n-------------------------------------");
printf("\nString After Replacing 'cc' by '&'");
printf("\n-------------------------------------\n");
printf("%s\n",str);
// main() should return a valid int status code (0 = success)
return 0;
}
Note the switch from the messy int
declaration + while
+ increment into one for
loop. This would be even less messy using a char*
pointer instead:
for (char* s = str; *s; ++s) {
if (s[0] == 'c' && s[1] == 'c'){
*s = '&';
shunt(&s[1], &s[2]);
}
}
When working with C strings it's important to be comfortable working with pointers as that can save you a lot of hassle.
You should also familiarize yourself with the C Standard Library so you can use tools like
strstr
instead of writing your own equivalent of same. Herestrstr(str, "cc")
could have helped.
You have to shift the whole array to left. A simple way of doing that is :
#include <stdio.h>
#include <string.h>
#define STR_SIZE 25
int main(){
char str[STR_SIZE] = "Hi this is Mark cc Alice";
int i=0,j=0;
while(str[i]!='\0'){
if(str[i]=='c' && str[i+1]=='c'){
str[i]='&';
for (j=i+1; j<STR_SIZE-1; j++) /* Shifting the array to the left */
{
str[j]=str[j+1];
}
}
i++;
}
printf("\n-------------------------------------");
printf("\nString After Replacing 'cc' by '&'");
printf("\n-------------------------------------\n");
printf("%s\n",str);
return 0;
}