como se puede poner un espacio en un vector y hacer que el resto del vector se corra un espacio mas adelante
ej: (hola) sin espacio
( hola ) con espacios
| |||
[B]poner espacios en un vector[/B] como se puede poner un espacio en un vector y hacer que el resto del vector se corra un espacio mas adelante ej: (hola) sin espacio ( hola ) con espacios |
| |||
Re: [B]poner espacios en un vector[/B] Espero que esto te sea lo que buscas. /////////////////////////////////////////////////////////////////////////////////////////////////////// #include <stdio.h> #include <conio.h> #include <string.h> void StrInsertText(char *dst, char *src) { long len; char *aux; aux = dst; len = strlen(src); if(len) { aux = dst + len; len = strlen(dst); memcpy(aux, dst, len); aux += len; } len = strlen(src); if(len) { memcpy(dst, src, len); } *aux = 0; } int main() { char *p; char sz[250]; strcpy(sz, "(hola)"); printf("sz(Antes): %s\n", sz); p = strchr(sz, '('); // Buscar el inicio del paréntesis if(p != NULL) StrInsertText(p + 1, " "); printf("sz(Despues 1): %s\n", sz); p = strchr(sz, ')'); // Buscar el final del paréntesis if(p != NULL) StrInsertText(p, " "); printf("sz(Despues 2): %s\n", sz); getch(); return 0; } |
| |||
Re: [B]poner espacios en un vector[/B] La funcion StrInsertText de Germancho7186 puede valer como ejemplo, pero hay que tener cuidado de usarla solo cuando los punteros dispongan de espacio suficiente para la ampliación. Si no, es preferible usar las funciones de libreria "realloc" y "memmove". |
| |||
Re: [B]poner espacios en un vector[/B] No Entoendo El Codigo De Arriba Lo Que Necesito Es Abrir Un Archivo Lo Leo Con Fgets Y Cuando Encuentr Un Parentesis Tengo Que Insertar Un Espacio Antes Y Despues Del Parentesis Como Le Hago Una Ayuda Porfavor |
| |||
Re: [B]poner espacios en un vector[/B] ¿ Tienes que regenerar el fichero con otro formato ?, Es decir ¿ Insertando espacios ? Si es de tipo texto, quizá lo más facil sea usar fprintf a un fichero nuevo y luego lo renombrar sobre el original. |
| |||
Re: [B]poner espacios en un vector[/B]
Código:
// Espero que esto te sea lo que buscas. // Bueno, aquí esta el nuevo código // Lo que hace es leer línea por línea de un archivo, y buscar los parantesis, // si encuentra un inicio de parantesis, inserta un espacio si es que antes no hay uno, // si encuentra un final de parantesis, inserta un espacio después, si es que no hay, // o si este parentesis el NO es el último caracter de la línea. // El archivo modificado se guardar bajo un nuevo nombre (filename + ".new"). // Ajuste la function StrInsertText ya que tenía un pequeño bug. /////////////////////////////////////////////////////////////////////////////////////////////////////// #include <stdio.h> #include <conio.h> #include <string.h> void StrInsertText(char *dst, char *src) { long len; len = strlen(src); if(len) { char *end = dst + strlen(dst); char *aux01 = end; char *aux02 = end + strlen(src); while(aux02 > dst) *aux02-- = *aux01--; } len = strlen(src); if(len) { memcpy(dst, src, len); } } void analize(char *filename) { FILE *pfSrc; FILE *pfDst; char filenamenew[250]; pfSrc = fopen(filename, "r"); strcpy(filenamenew, filename); strcat(filenamenew, ".new"); pfDst = fopen(filenamenew, "w"); if(pfSrc == NULL) // Si el archivo de origen es igual a NULL { printf("No se pudo abrir el archivo: \"%s\"", filename); } else if(pfDst != NULL) // Si el archivo de destino es diferente NULL (por supuesto que el archivo de origen tambien) { char *p; char sz[250]; while(!feof(pfSrc)) { // fgets(sz, 250, pfSrc); // Esto no es recomendable if(fgets(sz, 250, pfSrc)) // Siempre es necesario comprobar si la función tubo éxito // De lo contrario, cuando se llega al final del archivo, se estaría analizando la línea anterior { for(p = sz; *p != '\n'; p++) { if(*p == '(' && ((p != sz) && *(p - 1) != ' ')) // Inserta un espacio antes del paréntesis si es que no lo hay StrInsertText(p++, " "); // else if(*p == ')' && *(p + 1) != ' ') // Inserta un espacia despues del paréntesis si es que no lo hay else if(*p == ')' && *(p + 1) != ' ' && *(p + 1) != '\n') // Inserta un espacia despues del paréntesis si es que no lo hay, y si no es el último caracter de la línea StrInsertText(++p, " "); } fputs(sz, pfDst); } } printf("Ok\n"); } if(pfSrc) fclose(pfSrc); if(pfDst) fclose(pfDst); } void main(int argc, char *argv[]) { long i; if(argc > 1) // Si hay argumentos { for(i = 1; i < argc; i++) { analize(argv[i]); } } else // Si no hay argumentos, utilizar un archivo predefinido { analize("test.txt"); } getch(); } // Lo probé y me funciona, pero no sé si es lo que buscas. /* Ejemplo: ------------------------------------------------------------ // Antes: ((((texto_01))(texto_02)())) (()()((texto_01)(texto_02))()) // Después: ( ( ( (texto_01) ) (texto_02) () ) ) ( () () ( (texto_01) (texto_02) ) () ) */ |