Source code for submission s573

fs.c

  1. #include <stdio.h>
  2. #include <strings.h>
  3. #include <string.h>
  4.  
  5. char* fromMorse[] = {".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..", ".---", "-.-", ".-..", "--", "-.", "---", ".--.", "--.-", ".-.", "...", "-", "..-", "...-", ".--", "-..-", "-.--", "--..", "..--", ".-.-", "---.", "----"};
  6. char toMorse[] = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '_', ',', '.', '?'};
  7.  
  8. void s2m(char s, char *m);
  9. void m2s(char *m, int l, char *s);
  10.  
  11. int main()
  12. {
  13. int lengths[2000];
  14. int lengthcounter = 0;
  15. char chars[5000];
  16. char stringin[5000];
  17. char stringout[5000];
  18.  
  19. scanf("%s", stringin);
  20. int l = strlen(stringin);
  21.  
  22. int i;
  23. for (i = 0; i < l; i++)
  24. {
  25. char m[4];
  26. bzero(m, 4);
  27. s2m(stringin[i], m);
  28. lengths[lengthcounter++] = strlen(m);
  29. strcat(chars, m);
  30. }
  31.  
  32. int counter = 0;
  33. for (i = 0; i < l; i++)
  34. {
  35. char s = '\0';
  36. int length = lengths[--lengthcounter];
  37. m2s(&chars[counter], length, &s);
  38. counter += length;
  39. stringout[i] = s;
  40. }
  41.  
  42. printf("%s\n", stringout);
  43. }
  44.  
  45. void s2m(char s, char *m)
  46. {
  47. int i;
  48. for (i = 0; i < 30; i++)
  49. {
  50. if (s == toMorse[i])
  51. break;
  52. }
  53. strcpy(m, fromMorse[i]);
  54. }
  55.  
  56. void m2s(char *m, int l, char *s)
  57. {
  58. int i;
  59. for (i = 0; i < 30; i++)
  60. {
  61. if (strlen(fromMorse[i]) == l)
  62. {
  63. if (strncmp(fromMorse[i], m, l) == 0)
  64. {
  65. break;
  66. }
  67. }
  68. }
  69. *s = toMorse[i];
  70. }