Cómo convertir una cadena al alfabeto fonético de la OTAN en C


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 !");
}

Related Articles

¿Qué es una actualización principal? – Viernes de pizarra

Los puntos de vista del autor son totalmente suyos (excluyendo...

Comments

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Same Category

spot_img

Stay in touch!

Follow our Instagram