Autor
|
Tema: [Ayuda] separar cadena en partes (Leído 2,863 veces)
|
sabeeee
Desconectado
Mensajes: 155
|
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: que en c seria algo asi #include <stdio.h> #include <ctype.h> #include <string.h>
int main() { char pepe[21] = hola; printf(pepe); return 0; } O que en c seria algo asi #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. #include <stdio.h> #include <ctype.h> #include <string.h> #ifdef __cplusplus__ #include <cstdlib> #else #include <stdlib.h> #endif // Limpiador de pantalla void clrScr() { } // Mensaje "propagandistico" void Mensaje() { printf("\t+----------------------------+\n"); printf("\t|BATCH TO C SOURCE CONVERTER |\n"); printf("\t+----------------------------+\n"); } // Limpiador de ENTER void EnterLimp() { while ( getchar() != '\n' ); /* limpia el caracter ENTER de la entrada estandar */ } int main() { int oculto; int clave; int concatenado; FILE *fp; char *cPtr; char filename[30]; //filename for source code //end part of output file char end[50] = "\treturn 0;\n}"; //for command char cmd[150]; //la clave char cmb[350]; // Nombre archivo final Mensaje(); printf("\nEntre el nombre que le quiere dar al codigo saliente(.c): "); EnterLimp(); clrScr(); // Tipo de clave Mensaje(); printf("AVISO: (No es posible modo oculto con clave externa) (2) \n "); printf("Para modo clave escriba 1 o 2 para clave externa (-pass clave) : "); EnterLimp(); clrScr(); // Modo clave 1 if( clave== 1 ){ Mensaje(); printf("\nLa clave de mas de 3 caracteres: "); EnterLimp(); } // Modo clave 2 if( clave== 2 ){ Mensaje(); EnterLimp(); } clrScr(); //Modo "oculto" if( clave== 2 ){ Mensaje(); printf("No es posible modo oculto con clave externa\n"); printf("Enter para continuar\n"); getchar(); //pausa multiplataforma <3 }else{ Mensaje(); printf("Para modo oculto escriba 1 (solo windows) o 0 para normal : "); EnterLimp(); } clrScr(); //Concatenado Mensaje(); printf("\nMetodo de concatenado : "); printf("\n1 para metodo modo inteligente (beta) : "); scanf("%d",&concatenado ); EnterLimp(); clrScr(); //Codigos fp = fopen(filename ,"w"); if (fp==NULL) { printf("Ocurrio un error al intentar abrir el archivo"); } else { // includes normales fprintf(fp ,"#include <stdio.h>\n"); fprintf(fp ,"#include <stdlib.h>\n"); if( clave== 2 ){ fprintf(fp ,"#include <string.h>\n"); } if( oculto== 1 ){ // modo oculto fprintf(fp ,"#include <windows.h>\n"); } if( oculto== 1 ){ fprintf(fp ,"int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,\n"); fprintf(fp ,"PSTR szCmdLine, int iCmdShow)\n"); } // int argc, char **argv fprintf(fp ,"int main( int argc, char **argv)\n"); /* A solucionar... if( clave== 2 ){ // int argc, char **argv fprintf(fp,"int main( int argc, char **argv)\n"); fprintf(fp,"{\n"); }else{ // normal fprintf(fp,"int main()\n"); fprintf(fp,"{\n"); } */ if( clave== 1 ){ // modo clave fprintf(fp ,"printf(\"Escriba su clave: \");\n"); fprintf(fp ,"scanf(\"%%s\",clave);\n"); fprintf(fp ,"if(strcmp(clave,\"%s\")==0)\n",cmb ); } if( clave== 2 ){ // modo consola fprintf(fp ,"\tchar clave2[21] = \"%s\";\n",cmb ); fprintf(fp ,"\tif ( argc < 3 ) {\n"); fprintf(fp ,"\tprintf(\"USO: programa -pass clave\");\n"); fprintf(fp ,"\tif ( !strcmp( argv[1], \"-pass\" ) ) {\n"); fprintf(fp ,"\tstrncpy( clave, argv[2], 20 );\n"); fprintf(fp ,"\tclave[21] = '\\0';\n"); fprintf(fp ,"\tif ( !strcmp(clave, clave2) )\n"); } clrScr(); if( concatenado== 1 ){ // concatenado fprintf(fp ,"\tchar shin[1000];\n"); fprintf(fp ,"\tstrcpy (shin,\"\");\n"); Mensaje(); printf("\nComience a escribir los comandos : \n"); printf("Cuando finalice, ecriba 'end' para terminar\n"); fgets( cmd , 150, stdin ); if ( ( cPtr = strchr( cmd , '\n' ) ) != NULL ) *cPtr = '\0'; while ( strcmp( cmd , "end" ) ) { fprintf(fp ,"\tstrcat (shin,\"%s && \");\n",cmd ); fgets( cmd , 150, stdin ); if ( ( cPtr = strchr( cmd , '\n' ) ) != NULL ) *cPtr = '\0'; } fprintf(fp ,"\tstrcat (shin,\"exit\");\n"); fprintf(fp ,"\tprintf(\"\\n\");\n"); }else{ //Normal Mensaje(); printf("\nComience a escribir los comandos : \n"); printf("Cuando finalice, ecriba 'end' para terminar\n"); fgets( cmd , 150, stdin ); if ( ( cPtr = strchr( cmd , '\n' ) ) != NULL ) *cPtr = '\0'; while ( strcmp( cmd , "end" ) ) { fprintf(fp ,"\tsystem(\"%s\");\n",cmd ); fgets( cmd , 150, stdin ); if ( ( cPtr = strchr( cmd , '\n' ) ) != NULL ) *cPtr = '\0'; } fprintf(fp ,"\tprintf(\"\\n\");\n"); } if( clave== 1 ){ // modo clave fprintf(fp ,"\tprintf(\"Clave no valida\");\n}\n"); } if( clave== 2 ){ // modo clave fprintf(fp ,"\tprintf(\"Clave no valida\");\n}\n"); } clrScr(); } }
|
|
« Ú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
Mensajes: 222
|
y que es lo que precisamente quires hacer, explicate un poco mejor saludos...
|
|
|
En línea
|
Si C/C++ es el padre de los lenguajes entonces ASM es dios.
|
|
|
sabeeee
Desconectado
Mensajes: 155
|
y que es lo que precisamente quires hacer, explicate un poco mejor saludos... Un traductor de batch a C multiplataforma, aplicandolo a mi codigo, por ejemplo si en la consola pongo quiero transformar eso en , o mas complejo, si tengo 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 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. #include <stdio.h> #include <string.h> int main () { char str[80]; printf ("el codigo tiene %u caracteres de largo.\n",(unsigned)strlen(str )); return 0; }
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
|
Hola sabeeLas 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: char str[]; 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: 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: 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: 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: char str1[21]; char str2[22]; strcpy( str1, "soy una cadena"); printf( "str1 es: %s\n", str1 ); printf( "longitud de str1 es: %d", (int) strlen(str1) ); strcpy( str2, "soy otra cadena" ); printf( "str2 es: %s\n", str2 ); strcpy( str1, str2 ); /* copia str2 en str1 */ 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
Mensajes: 155
|
Yoel, muchas gracias, siempre dispuesto a ayudar a cambio de nada. 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? #include <stdio.h> #include <stdlib.h> #include <string.h> int main( int argc, char **argv) { char clave[21]; /* espacio para 20 caracteres, pues 5 es muy poco */ char clave2[21] = "hola"; /* clave del usuario */ if ( argc < 3 ) { /* salir si hay menos de tres argumentos */ printf("USO: programa -pass \"clave\" \n"); return 1; } if ( !strcmp( argv [1], "-pass" ) ) { clave[21] = '\0'; } else return 1; { printf("sencillo a ejecutar\n"); } else { } 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
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Separar cadena en variables y valores
PHP
|
Alex_bro
|
3
|
3,425
|
10 Julio 2008, 23:33 pm
por Hans el Topo
|
|
|
Separar partes de un un html code
Programación Visual Basic
|
extreme69
|
8
|
3,777
|
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,809
|
5 Mayo 2011, 14:29 pm
por Psyke1
|
|
|
Separar string Ayuda
« 1 2 »
Programación C/C++
|
prometheus48
|
15
|
7,922
|
18 Mayo 2012, 18:52 pm
por RyogiShiki
|
|
|
Ayuda con separar numeros de un string
PHP
|
landerzx
|
4
|
5,588
|
23 Noviembre 2012, 18:49 pm
por landerzx
|
|