Guest User

Untitled

a guest
Jul 17th, 2018
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.28 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. //
  6. // VerificarPar : Verifica si un numero es par o impar
  7. //
  8. bool VerificarPar(int Numero)
  9. {
  10. if ((Numero % 2) == 0)
  11. {
  12. return true;
  13. }
  14. return false;
  15. }
  16.  
  17. //
  18. // ReverseString : invierte las letras de la palabra
  19. // por ejemplo : "laho" la transformaria en "hola"
  20. //
  21. char * ReverseString(char * String)
  22. {
  23. //
  24. // Variable a retornar
  25. //
  26. static char szResult[256];
  27.  
  28.  
  29. //
  30. // Obtenemos la longitud de la palabra utilizando strlen
  31. //
  32. int Len = strlen(String);
  33.  
  34. //
  35. // Utilizamos un bucle del tipo for para copiar el texto
  36. //
  37. for( int i = Len - 1; i >= 0; i--)
  38. szResult[(Len - 1) - i] = String[i];
  39.  
  40. //
  41. // las string en C tienen que terminar en 0.
  42. //
  43. szResult[Len] = '\0';
  44.  
  45. //
  46. // Devolvemos el resultado
  47. //
  48.  
  49. return szResult;
  50. }
  51.  
  52. //
  53. // CambiarPalabra : intercambia las palabras de los extremos manteniendo las 3 letras del centro
  54. // ceaneam > amanece
  55. // ouchm > mucho
  56. //
  57. char * CambiarPalabra(char * String)
  58. {
  59. //
  60. // Variable a retornar
  61. //
  62. static char szResult[256];
  63.  
  64. //
  65. // Puntero para copiar texto
  66. //
  67. char * pTarget;
  68.  
  69. //
  70. // Obtenemos la longitud de la palabra utilizando strlen
  71. //
  72. int Len = strlen(String);
  73.  
  74. //
  75. // Calculamos la cantidad de letras a intercambiar
  76. //
  77. int iCambiar = (Len - 3) / 2;
  78.  
  79. //
  80. // Hacemos que el puntero pTarget apunte a las ultimas letras a intercambiar
  81. //
  82. pTarget = String + (Len - iCambiar);
  83.  
  84. //
  85. // Copiamos las ultimas letras a intercambiar al principio de szResult
  86. //
  87. strncpy(szResult, pTarget, iCambiar);
  88.  
  89. //
  90. // Hacemos que el puntero pTarget apunte a las 3 letras del medio (las que no se intercambian)
  91. //
  92. pTarget = String + iCambiar;
  93.  
  94. //
  95. // Copiamos las 3 letras del medio.
  96. //
  97. strncpy(szResult + iCambiar, pTarget, 3);
  98.  
  99. //
  100. // Hacemos que el puntero pTarget apunte a las primeras letras a intercambiar
  101. //
  102. pTarget = String;
  103.  
  104. //
  105. // Copiamos las primeras letras al final de szResult
  106. //
  107. strncpy(szResult + (Len - iCambiar), pTarget, iCambiar);
  108.  
  109. // NOTA : aca no es necesario que szResult termine en 0 porque strncpy ya lo hace.
  110.  
  111. //
  112. // Retornamos szResult que contiene la palabra intercambiada
  113. //
  114.  
  115. return szResult;
  116. }
  117.  
  118. int main(int argc, char * argv[])
  119. {
  120. //
  121. // iCount va a tener la cantidad de palabras a leer
  122. //
  123. int iCount = 0;
  124.  
  125. //
  126. // pInFile va a ser el archivo a leer.
  127. //
  128. FILE * fInFile = NULL;
  129.  
  130. //
  131. // pOutFile va a ser el archivo para guardar el resultado
  132. //
  133. FILE * fOutFile = NULL;
  134.  
  135. //
  136. // szOutput va a ser el texto final para guardarlo en el archivo refran.out
  137. //
  138. char szOutput[1024];
  139.  
  140. //
  141. // szPalabra va a servir para leer las palabras de refran.in
  142. //
  143. char szPalabra[256];
  144.  
  145. //
  146. // Iniciamos el array szOutput a 0
  147. //
  148. memset(szOutput, 0, sizeof(szOutput));
  149.  
  150. //
  151. // Iniciamos el array szPalabra a 0
  152. //
  153. memset(szPalabra, 0, sizeof(szPalabra));
  154.  
  155. //
  156. // Abrimos el archivo refran.in
  157. //
  158. fInFile = fopen("refran.in", "r");
  159.  
  160. //
  161. // Verificamos si se abrio correctamente, si no mostramos un error.
  162. //
  163. if (fInFile == NULL)
  164. {
  165. printf("[Error] No se encuentra el archivo refran.in!\n");
  166. system("PAUSE");
  167.  
  168. return 0;
  169. }
  170.  
  171. //
  172. // Leemos la cantidad de palabras
  173. //
  174. fscanf(fInFile, "%d", &iCount);
  175.  
  176. //
  177. // Verificamos que la cantidad de palabras sea mayor a 0
  178. //
  179.  
  180. if ( iCount > 0 )
  181. {
  182. //
  183. // Abrimos el archivo donde sera guardado el texto final
  184. //
  185. fOutFile = fopen("./refran.out", "w");
  186.  
  187. //
  188. // Verificamos si se abrio correctamente, si no mostramos un error.
  189. //
  190. if (fOutFile == NULL)
  191. {
  192. printf("[Error] No se pudo acceder al archivo refran.out!\n");
  193. system("PAUSE");
  194.  
  195. return 0;
  196. }
  197.  
  198. //
  199. // Utilizamos un bucle de tipo for para leer la cantidad de palabras y gardarlas en szOutput
  200. //
  201. for (int i = 0; i < iCount; i++ )
  202. {
  203. //
  204. // Leemos la palabra
  205. //
  206. fscanf(fInFile, "%s\n", szPalabra);
  207.  
  208. //
  209. // Obtenemos la longitud de la palabra
  210. //
  211. int iWordLen = strlen(szPalabra);
  212.  
  213. //
  214. // Verificamos que la longitud de la palabra sea mayor a 0
  215. //
  216. if ( iWordLen > 0 )
  217. {
  218. //
  219. // Si la longitud de la palabra es 1 o 3, la guardamos tal cual esta en el archivo refran.in
  220. //
  221. if ( iWordLen == 1 || iWordLen == 3 )
  222. {
  223. strcat(szOutput, szPalabra);
  224. }
  225. else if( VerificarPar(iWordLen) ) // Verificamos si la palabra es Par
  226. {
  227. //
  228. // si la palabra es par utilizamos la funcion ReverseString para invertirla y la agregamos
  229. // a szOutput
  230. //
  231. strcat(szOutput, ReverseString(szPalabra));
  232. }
  233. else // La variable es impar
  234. {
  235. //
  236. // si la palabra es impar tenemos que intercambiar las letras
  237. //
  238. strcat(szOutput, CambiarPalabra(szPalabra));
  239. }
  240.  
  241. //
  242. // verificamos que no sea la ultima palabra
  243. //
  244. if ( i + 1 < iCount )
  245. {
  246. //
  247. // Le agregamos un espacio
  248. //
  249. strcat(szOutput, " ");
  250. }
  251. }
  252. }
  253.  
  254. //
  255. // Escribimos el refran en el archivo refran.out
  256. //
  257. fprintf(fOutFile, "%s.", szOutput);
  258.  
  259. //
  260. // Cerramos el archivo refran.out
  261. //
  262. fclose(fOutFile);
  263. }
  264. //
  265. // Cerramos el archivo refran.in
  266. //
  267. fclose(fInFile);
  268.  
  269. system("PAUSE");
  270.  
  271. return 0;
  272. }
Add Comment
Please, Sign In to add comment