2013-10-27 7 views
-1

Я попытался переместить повторяющиеся символы в строке в свои конечные позиции, но мой код не работает более двух повторяющихся символов. Я пытался его решить, но не понял. Вот мой кодПеремещение повторяющихся символов в строке до конца

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); 
} 
+3

я вошел 100 символов и разбитый. :( –

+0

@ Daniel Я думаю, что это не авария. – Chetu

+1

читайте http://sscce.org и улучшите вопрос, чтобы включить ожидаемый результат и наблюдаемый результат, или в случае крушения строки (в вопросительном коде), где он сбой (используйте отладчик) или в случае ошибки компилятора ошибка и строка (в вопросительном коде), где это происходит. – hyde

ответ

0

Надеюсь, вам понравится тестовый код

#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; 
} 
Смежные вопросы