elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Recopilación Tutoriales y Manuales Hacking, Seguridad, Privacidad, Hardware, etc


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  [Ayuda] separar cadena en partes
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Ayuda] separar cadena en partes  (Leído 2,659 veces)
sabeeee

Desconectado Desconectado

Mensajes: 155


Ver Perfil
[Ayuda] separar cadena en partes
« en: 8 Enero 2015, 03:49 am »

Bueno, les explico soy muy pero muy novato en C  :-[ y me puse a "mejorar", un poco un código de batch a C, que en realidad solo llama al system, y la verdad es que ahora quiero que traduzca muy básico por ejemplo tengo en batch:

Código:
set pepe=hola
echo %pepe%

que en c seria algo asi

Código:
#include <stdio.h>
#include <ctype.h>
#include <string.h>

int main()
{
char pepe[21] = hola;
printf(pepe);
return 0;
}

O
Código:
echo HOLA MUNDO

que en c seria algo asi

Código:
#include <stdio.h>

int main()
{
printf("HOLA MUNDO");
return 0;
}

intente con memcpy y no entiendo muy bien solo necesitaría separar por ejemplo set "variable" = "valor", si sale vamos por linux.

Código
  1. #include <stdio.h>
  2. #include <ctype.h>
  3. #include <string.h>
  4.  
  5. #ifdef __cplusplus__
  6.  #include <cstdlib>
  7. #else
  8.  #include <stdlib.h>
  9. #endif
  10.  
  11. // Limpiador de pantalla
  12. void clrScr()
  13. {
  14. if (system("CLS")) system("clear");
  15. }
  16.  
  17. // Mensaje "propagandistico"
  18. void Mensaje()
  19. {
  20. printf("\t+----------------------------+\n");
  21.    printf("\t|BATCH TO C SOURCE CONVERTER |\n");
  22.    printf("\t+----------------------------+\n");
  23. }
  24. // Limpiador de ENTER
  25. void EnterLimp()
  26. {
  27. while ( getchar() != '\n' );    /* limpia el caracter ENTER de la entrada estandar */
  28. }
  29.  
  30. int main()
  31. {
  32. int oculto;
  33. int clave;
  34. int concatenado;
  35.  
  36.    FILE *fp;
  37. char *cPtr;
  38.    char filename[30];          //filename for source code
  39.    //end part of output file
  40.    char end[50] = "\treturn 0;\n}";
  41.    //for command
  42.    char cmd[150];
  43.    //la clave
  44.    char cmb[350];
  45.  
  46. // Nombre archivo final
  47. Mensaje();
  48. printf("\nEntre el nombre que le quiere dar al codigo saliente(.c): ");
  49. scanf("%s",filename);
  50. EnterLimp();
  51.  
  52. clrScr();
  53.  
  54. // Tipo de clave
  55. Mensaje();
  56. printf("AVISO: (No es posible modo oculto con clave externa) (2) \n ");
  57. printf("Para modo clave escriba 1 o 2 para clave externa (-pass clave) : ");
  58. scanf("%d" ,&clave);
  59. EnterLimp();
  60. clrScr();
  61.  
  62. // Modo clave 1
  63. if( clave== 1 ){
  64. Mensaje();
  65.    printf("\nLa clave de mas de 3 caracteres: ");
  66.    scanf("%s",cmb);
  67. EnterLimp();
  68. }
  69. // Modo clave 2
  70. if( clave== 2 ){
  71. Mensaje();
  72.    printf("\nLa clave: ");
  73.    scanf("%s",cmb);
  74. EnterLimp();
  75. }
  76. clrScr();
  77.  
  78. //Modo "oculto"
  79. if( clave== 2 ){
  80. Mensaje();
  81. printf("No es posible modo oculto con clave externa\n");
  82. printf("Enter para continuar\n");
  83. getchar(); //pausa multiplataforma <3
  84. }else{
  85. Mensaje();
  86. printf("Para modo oculto escriba 1 (solo windows) o 0 para normal : ");
  87. scanf("%d" ,&oculto);
  88. EnterLimp();
  89. }
  90. clrScr();
  91.  
  92. //Concatenado
  93. Mensaje();
  94.    printf("\nMetodo de concatenado : ");
  95.    printf("\n1 para metodo modo inteligente (beta) : ");
  96.    scanf("%d",&concatenado);
  97. EnterLimp();
  98.  
  99. clrScr();
  100.  
  101. //Codigos
  102. fp = fopen(filename,"w");
  103.    if (fp==NULL)
  104.    {
  105.     printf("Ocurrio un error al intentar abrir el archivo");
  106.     getchar();
  107.     exit(1);
  108.    }
  109.    else
  110.    {
  111. // includes normales
  112. fprintf(fp,"#include <stdio.h>\n");
  113.        fprintf(fp,"#include <stdlib.h>\n");
  114. if( clave== 2 ){
  115. fprintf(fp,"#include <string.h>\n");
  116. }
  117. if( oculto== 1 ){
  118. // modo oculto
  119.        fprintf(fp,"#include <windows.h>\n");
  120. }
  121.  
  122. if( oculto== 1 ){
  123.        fprintf(fp,"int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,\n");
  124.        fprintf(fp,"PSTR szCmdLine, int iCmdShow)\n");
  125. }
  126. // int argc, char **argv
  127. fprintf(fp,"int main( int argc, char **argv)\n");
  128.        fprintf(fp,"{\n");
  129.  
  130.  
  131. /* A solucionar...
  132. if( clave== 2 ){
  133. // int argc, char **argv
  134. fprintf(fp,"int main( int argc, char **argv)\n");
  135.         fprintf(fp,"{\n");
  136. }else{
  137. // normal
  138.         fprintf(fp,"int main()\n");
  139.         fprintf(fp,"{\n");
  140. } */
  141.  
  142. if( clave== 1 ){
  143. // modo clave
  144.  
  145.        fprintf(fp,"\nchar clave[6];\n");
  146.        fprintf(fp,"printf(\"Escriba su clave: \");\n");
  147.        fprintf(fp,"scanf(\"%%s\",clave);\n");
  148.        fprintf(fp,"if(strcmp(clave,\"%s\")==0)\n",cmb);
  149.        fprintf(fp,"{\n");
  150. }
  151. if( clave== 2 ){
  152. // modo consola
  153.        fprintf(fp,"\tchar clave[21];\n");
  154.        fprintf(fp,"\tchar clave2[21] = \"%s\";\n",cmb);
  155.        fprintf(fp,"\tif ( argc < 3 ) {\n");
  156.        fprintf(fp,"\tprintf(\"USO: programa -pass clave\");\n");
  157.        fprintf(fp,"\treturn 1;\n");
  158.        fprintf(fp,"}\n");
  159.        fprintf(fp,"\tif ( !strcmp( argv[1], \"-pass\" ) ) {\n");
  160.        fprintf(fp,"\tstrncpy( clave, argv[2], 20 );\n");
  161.        fprintf(fp,"\tclave[21] = '\\0';\n");
  162.        fprintf(fp,"}\n");
  163.        fprintf(fp,"\telse\n");
  164.        fprintf(fp,"return 1;\n");
  165.        fprintf(fp,"\n");
  166.        fprintf(fp,"\tif ( !strcmp(clave, clave2) )\n");
  167.        fprintf(fp,"{\n");
  168. }
  169. clrScr();
  170.  
  171. if( concatenado== 1 ){
  172. // concatenado
  173. fprintf(fp,"\tchar shin[1000];\n");
  174. fprintf(fp,"\tstrcpy (shin,\"\");\n");
  175.  
  176. Mensaje();
  177.  
  178.        printf("\nComience a escribir los comandos : \n");
  179.        printf("Cuando finalice, ecriba 'end' para terminar\n");
  180.  
  181.        printf("\nComandos :\n\n");
  182.  
  183. fgets( cmd, 150, stdin );
  184. if ( ( cPtr = strchr( cmd, '\n' ) ) != NULL ) *cPtr = '\0';
  185.  
  186. while ( strcmp( cmd, "end" ) )
  187. {
  188.         fprintf(fp,"\tstrcat (shin,\"%s && \");\n",cmd);
  189.         fgets( cmd, 150, stdin );
  190.         if ( ( cPtr = strchr( cmd, '\n' ) ) != NULL ) *cPtr = '\0';
  191. }
  192.        fprintf(fp,"\tstrcat (shin,\"exit\");\n");
  193. fprintf(fp,"\tsystem(shin);\n");
  194. fprintf(fp,"\tprintf(\"\\n\");\n");
  195. }else{
  196.  
  197. //Normal
  198. Mensaje();
  199.  
  200.        printf("\nComience a escribir los comandos : \n");
  201.        printf("Cuando finalice, ecriba 'end' para terminar\n");
  202.  
  203.        printf("\nComandos :\n\n");
  204.  
  205. fgets( cmd, 150, stdin );
  206. if ( ( cPtr = strchr( cmd, '\n' ) ) != NULL ) *cPtr = '\0';
  207.  
  208. while ( strcmp( cmd, "end" ) )
  209. {
  210.         fprintf(fp,"\tsystem(\"%s\");\n",cmd);
  211.         fgets( cmd, 150, stdin );
  212.  
  213.         if ( ( cPtr = strchr( cmd, '\n' ) ) != NULL ) *cPtr = '\0';
  214. }
  215. fprintf(fp,"\tprintf(\"\\n\");\n");
  216. }
  217.  
  218. if( clave== 1 ){
  219. // modo clave
  220.        fprintf(fp,"\t}\nelse\n{\n");
  221.        fprintf(fp,"\tprintf(\"Clave no valida\");\n}\n");
  222. }
  223.  
  224. if( clave== 2 ){
  225. // modo clave
  226.        fprintf(fp,"\t}\nelse\n{\n");
  227.        fprintf(fp,"\tprintf(\"Clave no valida\");\n}\n");
  228. }
  229.  
  230.        fprintf(fp,"\n%s",end);
  231.  
  232. clrScr();
  233.  
  234.  
  235.    fclose(fp);
  236.    }
  237. }


« Última modificación: 8 Enero 2015, 18:04 pm por sabeeee » En línea

"Vengándose, uno iguala a su enemigo; perdonando, uno se muestra superior a él."
Francis Bacon
crack81

Desconectado Desconectado

Mensajes: 222



Ver Perfil
Re: [Ayuda] Traductor de cmd a c
« Respuesta #1 en: 8 Enero 2015, 05:21 am »

y que es lo que precisamente quires hacer, explicate un poco mejor saludos... :huh:


En línea

Si C/C++ es el padre de los lenguajes entonces ASM es dios.
sabeeee

Desconectado Desconectado

Mensajes: 155


Ver Perfil
Re: [Ayuda] Traductor de cmd a c
« Respuesta #2 en: 8 Enero 2015, 17:27 pm »

y que es lo que precisamente quires hacer, explicate un poco mejor saludos... :huh:

Un traductor de batch a C multiplataforma, aplicandolo a mi codigo, por ejemplo si en la consola pongo
Código:
echo 123
quiero transformar eso en  
Código:
printf("123");
, o mas complejo, si tengo
Código:
set a=b
el a y el b se guarden en una variable y cuando vaya a hacer fprint se cree un char a[]=b;

o si tengo pause en vez de hacer system("pause")

detecte el pause e imprima
Código:
	printf("Enter para continuar\n");
getchar();

por ejemplo.

y otra cosa muy buena que encontré es el strlen para contar la longitud de una cadena, quizá se pueda aplicar para quizás se pueda aplicar en el código también.

Código
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. int main ()
  5. {
  6.  char str[80];
  7.  strcpy (str,"Hola");
  8.  strcat (str,"esto");
  9.  strcat (str,"es");
  10.  strcat (str,"un ejemplo.");
  11.  printf ("el codigo tiene %u caracteres de largo.\n",(unsigned)strlen(str));
  12.  return 0;
  13. }


por ahora solo necesitaría que me expliquen bien eso de las cadenas, me ayudaría mucho.
« Última modificación: 8 Enero 2015, 17:39 pm por sabeeee » En línea

"Vengándose, uno iguala a su enemigo; perdonando, uno se muestra superior a él."
Francis Bacon
Yoel Alejandro

Desconectado Desconectado

Mensajes: 254



Ver Perfil WWW
Re: [Ayuda] separar cadena en partes
« Respuesta #3 en: 9 Enero 2015, 00:46 am »

Hola sabee

Las cadenas en C son arrays, es decir, arreglos, vectores, de elementos del tipo char. Es decir, las cadenas como tal no existen como tipo de dato básico de C, lo que existen son los caracteres, y las cadenas son arreglos o vectores de caracteres.

Para declarar una cadena en C puedes usar cualquiera de las formas:
Código
  1. char str[];
  2. char *str;

donde la primera declara un arreglo de char, y la segunda declara un apuntador a tipo char, ya que en C los arreglos son también apuntadores, pero es otro tema de discusión ...

También se pueden hacer declaraciones donde se inicialice directamente el contenido:
Código:
char str[] = "hola mundo";
en la que automáticamente el compilador calcula la cantidad de espacio necesario en el array para albergar la cadena respectiva.

Ten en cuenta que toda cadena en C debe estar terminada por un carácter especial llamado "nulo", simbolizado por '\0'. Esto demarca el fin de la cadena, y por lo tanto la cantidad de espacio de memoria asignado a la cadena. De otro modo, si no se encontrara el fin de cadena, la misma abarcaría consecutivamente todos los bytes de memoria hasta invadir un área prohibida de la misma e incurriendo en lo que se llama violación de segmento.

Por esta razón siempre debes sumar un byte adicional al reservar espacio para tu cadena. Por ejemplo la cadena "hola" ocupa físicamente 5 bytes de la memoria, es decir 4 bytes más el nulo de terminación:
Código:
'h'  'o'  'l'  'a'  '\0' 

Igualmente,  si una cadena tendrá n caracteres de longitud, debes declarar un arreglo de longitud n+1. Si la cadena msg deberá contener 100 caracteres como máximo entonces se declara:
Código:
char msg[101];
y así sucesivamente.

==================================================================
Dos funciones útiles de la biblioteca estándar de C para manipulación de cadenas (<string.h>) son strlen() y strcpy(). La primera calcula la longitud de la cadena, y la segunda copia el contenido de una cadena en otra (suponiendo que la cadena destino posee el espacio disponible suficiente). Ejemplos:

Código
  1. char str1[21];
  2. char str2[22];
  3.  
  4. strcpy( str1, "soy una cadena");
  5. printf( "str1 es: %s\n", str1 );
  6. printf( "longitud de str1 es: %d", (int) strlen(str1) );
  7. strcpy( str2, "soy otra cadena" );
  8. printf( "str2 es: %s\n", str2 );
  9. strcpy( str1, str2 );        /* copia str2 en str1 */
  10. printf( "ahora str1 es: %s\n", str1 );


=========================
Espero haberte ayudado en una introducción al tema, cualquier cosa preguntas  ;)

En línea

Saludos, Yoel.
P.D..-   Para mayores dudas, puedes enviarme un mensaje personal (M.P.)
sabeeee

Desconectado Desconectado

Mensajes: 155


Ver Perfil
Re: [Ayuda] separar cadena en partes
« Respuesta #4 en: 10 Enero 2015, 02:12 am »

Yoel, muchas gracias, siempre dispuesto a ayudar a cambio de nada.
Código:
int main(int argc, char *argv[])
, aveces siento que molesto, pero yo decia de hacer algo parecido al argc pero que se pueda utilizar desde el mismo programa como si pusiese -pass hola ¿Te acordas?
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. int main( int argc, char **argv)
  6. {
  7.  
  8.   char clave[21];             /* espacio para 20 caracteres, pues 5 es muy poco */
  9.   char clave2[21] = "hola"; /* clave del usuario */
  10.   if ( argc < 3 ) { /* salir si hay menos de tres argumentos */
  11.      printf("USO: programa -pass \"clave\" \n");
  12.      return 1;
  13.   }
  14.  
  15.   if ( !strcmp( argv[1], "-pass" ) ) {
  16.      strncpy( clave, argv[2], 20 );
  17.      clave[21] = '\0';
  18.   }
  19.   else
  20.      return 1;
  21.  
  22.   if ( !strcmp(clave, clave2) )
  23.   {
  24.      printf("sencillo a ejecutar\n");
  25.   }
  26.   else
  27.   {
  28.      printf("Clave no valida\n");
  29.   }
  30.  
  31.   return 0;

Voy a intentar improvisar un código en estos momentos.

se podria usar el strtok para esto?
« Última modificación: 10 Enero 2015, 03:13 am por sabeeee » En línea

"Vengándose, uno iguala a su enemigo; perdonando, uno se muestra superior a él."
Francis Bacon
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Separar cadena en variables y valores
PHP
Alex_bro 3 3,225 Último mensaje 10 Julio 2008, 23:33 pm
por Hans el Topo
Separar partes de un un html code
Programación Visual Basic
extreme69 8 3,500 Último mensaje 22 Febrero 2011, 16:51 pm
por ignorantev1.1
[Solucionado] Separar una Cadena de Texto Caracter Por Caracter « 1 2 »
Programación Visual Basic
agus0 19 22,125 Último mensaje 5 Mayo 2011, 14:29 pm
por Psyke1
Separar string Ayuda « 1 2 »
Programación C/C++
prometheus48 15 7,158 Último mensaje 18 Mayo 2012, 18:52 pm
por RyogiShiki
Ayuda con separar numeros de un string
PHP
landerzx 4 5,338 Último mensaje 23 Noviembre 2012, 18:49 pm
por landerzx
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines