El reto
Tendrás que traducir una cadena al alfabeto de Pilot (Alfabeto fonético de la OTAN).
Aporte:
If, you'll be able to learn?
Producción:
India Foxtrot , Yankee Oscar Uniform Charlie Alfa November Romeo Echo Alfa Delta ?
Nota:
- Hay un diccionario precargado que puede usar, llamado
NATO
- El conjunto de puntuación utilizado es
,.!?
. - La puntuación debe mantenerse en la cadena de retorno, pero no los espacios.
- Radiografía no debe tener un guión dentro.
- Cada palabra y signo de puntuación debe estar separado por un espacio ‘ ‘.
- No debe haber espacios en blanco al last
La solución en C
Opción 1:
#embody <stdlib.h>
#embody <ctype.h>
#embody <stdio.h>
#embody <string.h>
// NATO('A') == "Alfa", and so on
extern const char *const NATO(128);
char *to_nato(const char *phrases)
{
char* s = calloc(1000, 1);
char* r = s;
whereas(*phrases){
if(isalpha(*phrases)) sprintf(s, "%spercents ", s, NATO(toupper(*phrases)));
else if(*phrases != ' ') sprintf(s, "%spercentc ", s, *phrases);
phrases++;
}
s(strlen(s) - 1) = ' ';
return r;
}
Opcion 2:
#embody <string.h>
extern const char *const NATO();
char *to_nato (const char *s) { char *r,*t=*(s+=strspn (s," "))&&s(1)?to_nato (s+1):""; asprintf (&r,*t?"%s %s":"%s", *s?strchr (",.!?",*s)?(char(2)){*s,0}:NATO(*s&~32):"", t); return r; }
Opción 3:
#embody <stdlib.h>
#embody <string.h>
#embody <ctype.h>
// NATO('A') == "Alfa", and so on
extern const char *const NATO();
char *to_nato(const char *phrases){
char *nato = (char *)calloc(strlen(phrases) * 20, 1);
whereas(*phrases != ' '){
if(isalpha(*phrases)){
strcat(nato, NATO(toupper(*phrases)));
strcat(nato, " ");
}else if(strchr(",.!?", *phrases) != NULL){
strncat(nato, phrases, 1);
strcat(nato, " ");
}
phrases++;
}
char *p = strchr(nato, ' ');
*(p - 1) = *p;
return nato; // Go code
}
Casos de prueba para validar nuestra solución
#embody <criterion/criterion.h>
extern void do_test(const char *phrases, const char *anticipated);
Check(sample_test, example_tests)
{
do_test("If you happen to can learn",
"India Foxtrot Yankee Oscar Uniform Charlie Alfa November Romeo Echo Alfa Delta");
do_test("Didn't see that coming",
"Delta India Delta November Oscar Tango Sierra Echo Echo Tango Lodge Alfa Tango Charlie Oscar Mike India November Golf");
do_test("go for it!",
"Golf Oscar Foxtrot Oscar Romeo India Tango !");
}