rmoronsv

Untitled

Dec 17th, 2019
286
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.45 KB | None | 0 0
  1. void expand(char s1[], char s2[]);
  2.  
  3. main()
  4. {
  5. int c;
  6. int i = 0;
  7. char s1[MAXARRAYSIZE];
  8. char s2[MAXARRAYSIZE];
  9. while ((c = getchar()) != EOF)
  10. s1[i++] = c;
  11. s1[i] = '\0';
  12. expand(s1, s2);
  13. printf("%s", s2);
  14. }
  15.  
  16. void expand(char s1[], char s2[])
  17. {
  18. int INALETTEREXPANSION = NO;
  19. int INANUMBEREXPANSION = NO;
  20. int i = 0;
  21. int k;
  22. int j = 0;
  23. int nc = 0;
  24. int valk;
  25. int vali;
  26. int inc;
  27. while (s1[i] != '\0')
  28. {
  29. switch (s1[i])
  30. {
  31. case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': case 'g': case 'h': case 'i': case 'j': case 'k': case 'l': case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': case 's': case 't': case 'u': case 'v': case 'w': case 'x': case 'y': case 'z':
  32. case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': case 'Y': case 'Z':
  33. if (!INALETTEREXPANSION)
  34. {
  35. s2[j++] = s1[i];
  36. INALETTEREXPANSION = YES;
  37. }
  38. k = i + 1;
  39. nc = 1;
  40. while (!isalnum(s1[k]) && s1[k] != '-')
  41. nc++, k++;
  42. if (isdigit(s1[k]))
  43. {
  44. INALETTEREXPANSION = NO;
  45. i++;
  46. }
  47. else if (s1[k] == '-')
  48. {
  49. nc++, k++;
  50. while (!isalnum(s1[k]))
  51. nc++, k++;
  52. if (isalpha(s1[k]) && s1[k] > s1[i])
  53. {
  54. valk = s1[k];
  55. vali = s1[i];
  56. inc = 1;
  57. while (valk-- > vali)
  58. {
  59. s2[j++] = s1[i] + inc++;
  60. }
  61. i += nc;
  62. INALETTEREXPANSION = YES;
  63. }
  64. else if (isalpha(s1[k]) && s1[k] < s1[i])
  65. {
  66. valk = s1[k];
  67. vali = s1[i];
  68. inc = 1;
  69. while (valk++ < vali)
  70. {
  71. s2[j++] = s1[i] - inc++;
  72. }
  73. i += nc;
  74. INALETTEREXPANSION = YES;
  75. }
  76. else if (isalpha(s1[k]) && s1[k] == s1[i])
  77. {
  78. s2[j++] = s1[i];
  79. i += nc;
  80. }
  81. else
  82. {
  83. s2[j++] = '-';
  84. i += nc;
  85. INALETTEREXPANSION = NO;
  86. }
  87. }
  88. else if (isalpha(s1[k]))
  89. {
  90. INALETTEREXPANSION = NO;
  91. i += nc;
  92. }
  93. break;
  94.  
  95. case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9':
  96. if (!INANUMBEREXPANSION)
  97. {
  98. s2[j++] = s1[i];
  99. INANUMBEREXPANSION = YES;
  100. }
  101. k = i + 1;
  102. nc = 1;
  103. while (!isalnum(s1[k]) && s1[k] != '-')
  104. nc++, k++;
  105. if (isalpha(s1[k]))
  106. {
  107. INANUMBEREXPANSION = NO;
  108. i++;
  109. }
  110. else if (s1[k] == '-')
  111. {
  112. nc++, k++;
  113. while (!isalnum(s1[k]))
  114. nc++, k++;
  115. if (isdigit(s1[k]) && s1[k] > s1[i])
  116. {
  117. valk = s1[k];
  118. vali = s1[i];
  119. inc = 1;
  120. while (valk-- > vali)
  121. {
  122. s2[j++] = s1[i] + inc++;
  123. }
  124. i += nc;
  125. INALETTEREXPANSION = YES;
  126. }
  127. else if (isdigit(s1[k]) && s1[k] < s1[i])
  128. {
  129. valk = s1[k];
  130. vali = s1[i];
  131. inc = 1;
  132. while (valk++ < vali)
  133. {
  134. s2[j++] = s1[i] - inc++;
  135. }
  136. i += nc;
  137. INALETTEREXPANSION = YES;
  138. }
  139. else if (isdigit(s1[k]) && s1[k] == s1[i])
  140. {
  141. s2[j++] = s1[i];
  142. i += nc;
  143. }
  144. else
  145. {
  146. s2[j++] = '-';
  147. i += nc;
  148. INALETTEREXPANSION = NO;
  149. }
  150. }
  151. else if (isalpha(s1[k]))
  152. {
  153. INANUMBEREXPANSION = NO;
  154. i += nc;
  155. }
  156. break;
  157.  
  158. default:
  159. s2[j++] = s1[i++];
  160. break;
  161. }
  162. }
  163. s2[j] = '\0';
  164. }
Advertisement
Add Comment
Please, Sign In to add comment