3.2.c 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200
  1. #include <stdio.h>
  2. void escape(char s[], char t[]);
  3. int countescapes(char s[]);
  4. int main()
  5. {
  6. char s[100];
  7. escape(s, "lol what is this bullshit \b \b \n \r \n \\ \n");
  8. printf("%s \n number of escapes: %d \n",s,countescapes(s));
  9. }
  10. int countescapes(char s[])
  11. {
  12. int i,j;
  13. i=j=0;
  14. while (s[i]!=0)
  15. {
  16. switch(s[i])
  17. {
  18. case '\0' :
  19. j++;
  20. i++;
  21. continue;
  22. case '\a' :
  23. j++;
  24. i++;
  25. continue;
  26. case '\b' :
  27. j++;
  28. i++;
  29. continue;
  30. case '\t' :
  31. j++;
  32. i++;
  33. continue;
  34. case '\n' :
  35. j++;
  36. i++;
  37. continue;
  38. case '\v' :
  39. j++;
  40. i++;
  41. continue;
  42. case '\f' :
  43. j++;
  44. i++;
  45. continue;
  46. case '\r' :
  47. j++;
  48. i++;
  49. continue;
  50. case '\\':
  51. j++;
  52. i++;
  53. continue;
  54. default: i++;
  55. }
  56. }
  57. return j-1; //end of the string always matches
  58. }
  59. /*
  60. s must be big enough to hold a string from t with all the escapes in
  61. */
  62. void escape(char s[], char t[])
  63. {
  64. int i,j;
  65. i=j=0;
  66. while(t[j]!=0)
  67. {
  68. switch(t[j])
  69. {
  70. case '\0' :
  71. s[i]='\\';
  72. s[i+1]='0';
  73. i+=2;
  74. j++;
  75. continue;
  76. case '\a' :
  77. s[i]='\\';
  78. s[i+1]='a';
  79. i+=2;
  80. j++;
  81. continue;
  82. case '\b' :
  83. s[i]='\\';
  84. s[i+1]='b';
  85. i+=2;
  86. j++;
  87. continue;
  88. case '\t' :
  89. s[i]='\\';
  90. s[i+1]='t';
  91. i+=2;
  92. j++;
  93. continue;
  94. case '\n' :
  95. s[i]='\\';
  96. s[i+1]='n';
  97. i+=2;
  98. j++;
  99. continue;
  100. case '\v' :
  101. s[i]='\\';
  102. s[i+1]='v';
  103. i+=2;
  104. j++;
  105. continue;
  106. case '\f' :
  107. s[i]='\\';
  108. s[i+1]='f';
  109. i+=2;
  110. j++;
  111. continue;
  112. case '\r' :
  113. s[i]='\\';
  114. s[i+1]='r';
  115. i+=2;
  116. j++;
  117. continue;
  118. case '\\':
  119. s[i]='\\';
  120. s[i+1]='\\';
  121. i+=2;
  122. j++;
  123. continue;
  124. default: s[i]=t[j]; i++; j++;
  125. }
  126. }
  127. s[i]=0;
  128. }
  129. void deescape(char s[], char t[])
  130. {
  131. int i,j;
  132. i=j=0;
  133. while(t[j]!=0)
  134. {
  135. switch(t[j])
  136. {
  137. case '\0' :
  138. s[i]='\\';
  139. s[i+1]='0';
  140. i+=2;
  141. j++;
  142. continue;
  143. case '\a' :
  144. s[i]='\\';
  145. s[i+1]='a';
  146. i+=2;
  147. j++;
  148. continue;
  149. case '\b' :
  150. s[i]='\\';
  151. s[i+1]='b';
  152. i+=2;
  153. j++;
  154. continue;
  155. case '\t' :
  156. s[i]='\\';
  157. s[i+1]='t';
  158. i+=2;
  159. j++;
  160. continue;
  161. case '\n' :
  162. s[i]='\\';
  163. s[i+1]='n';
  164. i+=2;
  165. j++;
  166. continue;
  167. case '\v' :
  168. s[i]='\\';
  169. s[i+1]='v';
  170. i+=2;
  171. j++;
  172. continue;
  173. case '\f' :
  174. s[i]='\\';
  175. s[i+1]='f';
  176. i+=2;
  177. j++;
  178. continue;
  179. case '\r' :
  180. s[i]='\\';
  181. s[i+1]='r';
  182. i+=2;
  183. j++;
  184. continue;
  185. case '\\':
  186. s[i]='\\';
  187. s[i+1]='\\';
  188. i+=2;
  189. j++;
  190. continue;
  191. default: s[i]=t[j]; i++; j++;
  192. }
  193. }
  194. s[i]=0;
  195. }