Question

I tried to move the repeated characters in a string to its end positions but my code not working for more than two repeated characters. I tried to solve it but not getting it. Here is my code

main () {
char string[100];
char *s, *p;
char c;
scanf("%s", string);
s = string;
c = *s++;
while (*s){
    if(*s == c){
        for(p = s; *p ; p++)
            *p = *(p + 1);
        *--p = c;
    }
    c = *s;
    s++;
}
printf ( "%s\n", string);
}
Was it helpful?

Solution

Hope you like the test code

#include <string.h>
#include <stdio.h>


void rep2end(char *string) {
char *s, *p, *e, *stop;
char c;
s = string;
e = s+strlen(string)-1; /* find end of string */
stop = e;               /* place to stop processing */
while (stop > s){        
    c = *s;             /* char to look for */
    while(*(s+1) == c){ /* repeated char */
        for(p = s+1; *p ; p++){ /* shuffle left to overwrite current pos *s */
            *(p-1) = *p;
        }
        *e = c; /* set end char to be the repeat we just found */
        stop--; /* bump the stop position left to prevent reprocessing */
    }
    s++;
    }
}


main () {
char *in[]={"aabbccefghi", "uglyfruit", "highbbbbchair"};
char *out[]={"abcefghiabc", "uglyfruit", "highbchairbbb"};
char string[100];
int i;

for (i=0; i<3; i++) {
strcpy(string, in[i]);
rep2end(string);
if (!strcmp(string,out[i])) { 
   printf("ok\n");
   }else {
   printf("fail %s should be %s\n", string, out[i]);
   }


}
return 0;
}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top