Foros del Web » Programación para mayores de 30 ;) » C/C++ »

[B]poner espacios en un vector[/B]

Estas en el tema de [B]poner espacios en un vector[/B] en el foro de C/C++ en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 29/03/2008, 00:02
 
Fecha de Ingreso: marzo-2008
Mensajes: 17
Antigüedad: 16 años, 8 meses
Puntos: 0
[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
  #2 (permalink)  
Antiguo 29/03/2008, 01:17
 
Fecha de Ingreso: marzo-2008
Mensajes: 22
Antigüedad: 16 años, 8 meses
Puntos: 1
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;
}
  #3 (permalink)  
Antiguo 29/03/2008, 01:50
 
Fecha de Ingreso: marzo-2008
Mensajes: 303
Antigüedad: 16 años, 8 meses
Puntos: 4
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".
  #4 (permalink)  
Antiguo 30/03/2008, 20:33
 
Fecha de Ingreso: marzo-2008
Mensajes: 17
Antigüedad: 16 años, 8 meses
Puntos: 0
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
  #5 (permalink)  
Antiguo 31/03/2008, 01:08
 
Fecha de Ingreso: marzo-2008
Mensajes: 306
Antigüedad: 16 años, 8 meses
Puntos: 6
Re: [B]poner espacios en un vector[/B]

Cita:
Iniciado por nikolog Ver Mensaje
Tengo Que Insertar Un Espacio Antes Y Despues Del Parentesis
¿ 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.
  #6 (permalink)  
Antiguo 31/03/2008, 01:12
 
Fecha de Ingreso: marzo-2008
Mensajes: 22
Antigüedad: 16 años, 8 meses
Puntos: 1
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) ) () )

*/
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:30.