manejo de Cadenas

28/07/2005 - 16:28 por Arturo | Informe spam
Hola a todos, espero que esten bien, en esta ocasion les
pido su ayuda para que me digan que instrucciones puedo
usar para alterar una cadena, los pongo el ejemplo de lo
que quiero:
char cadena[]="(RANCHO, EL)"
Esto al final debe quedar: char cadena[]="(EL RANCHO)"
pero solamente debe ocurrir cuando las palabras despues de
la coma sea: EL, LOS, LA, LAS. En caso de que yo envie:
(TECOLOTES, EJIDO CAMPECHE) no debe hacer nada; en si
siempre que haya un articulo despues de la coma lo haga,
¿Me pueden decir como le hago por favor? Si tiene un
codigo mejor porque apenas estoy aprendiendo C++. De
antemano muchas gracias anticipadas.

Preguntas similare

Leer las respuestas

#6 Willser F. González C.
28/07/2005 - 21:50 | Informe spam
Qué pena, pero hay se me fue mal una variable,

Donde quiera que aparezca la variable "l_iPosicionComa", se debe reemplazar
por "l_iPosicionArticulo".

Willser F.



"Willser F. González C." escribió en el mensaje
news:
Cuántas comas (,) podría llegar a tener una cadena?; si es sólo una, sería
que buscara la primer coma coincidente, esta búsqueda le devuelve la
posición donde la encontró, entonces, con base en esa posición se puede
sustraer la subcadena de la izquierda y la de la derecha, esas dos
subcadenas las concatena nuevamente pero en orden inverso y listo, ya
está. Claro que antes de hacer esta concatenación hay que hacer un ciclo
para que se determine si la segunda subcadena (la de la derecha)
corresponde a un artículo.

Algo así como:

main()
{
char l_vvcArticulos[4][4] = {"EL", "LA", "LOS", "LAS"};

char l_vcCadenaInicial[30] = "(RANCHO, EL)";

char l_vcSubCadenaDer[30]; // SubCadena después de la
coma (,).

char l_vcCadenaFinal[30];

char *l_pcPosicionComa = NULL;

unsigned int i, l_iPosicionArticulo = 0;


l_pcPosicionComa = strchr(l_vcCadenaInicial, ','); // Buscar la coma.

l_iPosicionArticulo = l_pcPosicionComa - l_vcCadenaInicial + 2;

if ((l_pcPosicionComa != NULL) &&
(l_iPosicionComa < strlen(l_vcCadenaInicial))) // Coma encontrada.
{
strcpy(l_vcSubCadenaDer, l_vcCadenaInicial + l_iPosicionArticulo);
// Extrae subcadena derecha.

if (l_vcSubCadenaDer[strlen(l_vcSubCadenaDer) - 1] == ')') //
Eliminar el paréntesis.
{
l_vcSubCadenaDer[strlen(l_vcSubCadenaDer) - 1] = 0;

_strupr(l_vcSubCadenaDer); // Convertir a mayúscula por si
acaso.
}

for (i = 0; i < 4; i++) // Para cada artículo.
if (strcmp(l_vcSubCadenaDer, l_vvcArticulos[i]) == 0) // Es un
artículo.
break;

if (i < 4) // Es un artículo.
{
strcpy(l_vcCadenaFinal, "(");
strcat(l_vcCadenaFinal + 1, l_vcSubCadenaDer);
strcat(l_vcCadenaFinal, " ");
strncat(l_vcCadenaFinal, l_vcCadenaInicial + 1,
l_pcPosicionComa - l_vcCadenaInicial - 1);

strcat(l_vcCadenaFinal, ")"); // Aquí queda la cadena final
con el artículo al principio.
}
}
}


Willser F.



"Arturo" escribió en el mensaje
news:006e01c59380$a4d5a910$
Hola a todos, espero que esten bien, en esta ocasion les
pido su ayuda para que me digan que instrucciones puedo
usar para alterar una cadena, los pongo el ejemplo de lo
que quiero:
char cadena[]="(RANCHO, EL)"
Esto al final debe quedar: char cadena[]="(EL RANCHO)"
pero solamente debe ocurrir cuando las palabras despues de
la coma sea: EL, LOS, LA, LAS. En caso de que yo envie:
(TECOLOTES, EJIDO CAMPECHE) no debe hacer nada; en si
siempre que haya un articulo despues de la coma lo haga,
¿Me pueden decir como le hago por favor? Si tiene un
codigo mejor porque apenas estoy aprendiendo C++. De
antemano muchas gracias anticipadas.

Respuesta Responder a este mensaje
#7 Willser F. González C.
28/07/2005 - 21:53 | Informe spam
Qué pena, pero ahí se me fue mal una variable,

Donde quiera que aparezca la variable "l_iPosicionComa", se debe reemplazar
por "l_iPosicionArticulo".

Willser F.


"Willser F. González C." escribió en el mensaje
news:
Cuántas comas (,) podría llegar a tener una cadena?; si es sólo una, sería
que buscara la primer coma coincidente, esta búsqueda le devuelve la
posición donde la encontró, entonces, con base en esa posición se puede
sustraer la subcadena de la izquierda y la de la derecha, esas dos
subcadenas las concatena nuevamente pero en orden inverso y listo, ya
está. Claro que antes de hacer esta concatenación hay que hacer un ciclo
para que se determine si la segunda subcadena (la de la derecha)
corresponde a un artículo.

Algo así como:

main()
{
char l_vvcArticulos[4][4] = {"EL", "LA", "LOS", "LAS"};

char l_vcCadenaInicial[30] = "(RANCHO, EL)";

char l_vcSubCadenaDer[30]; // SubCadena después de la
coma (,).

char l_vcCadenaFinal[30];

char *l_pcPosicionComa = NULL;

unsigned int i, l_iPosicionArticulo = 0;


l_pcPosicionComa = strchr(l_vcCadenaInicial, ','); // Buscar la coma.

l_iPosicionArticulo = l_pcPosicionComa - l_vcCadenaInicial + 2;

if ((l_pcPosicionComa != NULL) &&
(l_iPosicionComa < strlen(l_vcCadenaInicial))) // Coma encontrada.
{
strcpy(l_vcSubCadenaDer, l_vcCadenaInicial + l_iPosicionArticulo);
// Extrae subcadena derecha.

if (l_vcSubCadenaDer[strlen(l_vcSubCadenaDer) - 1] == ')') //
Eliminar el paréntesis.
{
l_vcSubCadenaDer[strlen(l_vcSubCadenaDer) - 1] = 0;

_strupr(l_vcSubCadenaDer); // Convertir a mayúscula por si
acaso.
}

for (i = 0; i < 4; i++) // Para cada artículo.
if (strcmp(l_vcSubCadenaDer, l_vvcArticulos[i]) == 0) // Es un
artículo.
break;

if (i < 4) // Es un artículo.
{
strcpy(l_vcCadenaFinal, "(");
strcat(l_vcCadenaFinal + 1, l_vcSubCadenaDer);
strcat(l_vcCadenaFinal, " ");
strncat(l_vcCadenaFinal, l_vcCadenaInicial + 1,
l_pcPosicionComa - l_vcCadenaInicial - 1);

strcat(l_vcCadenaFinal, ")"); // Aquí queda la cadena final
con el artículo al principio.
}
}
}


Willser F.



"Arturo" escribió en el mensaje
news:006e01c59380$a4d5a910$
Hola a todos, espero que esten bien, en esta ocasion les
pido su ayuda para que me digan que instrucciones puedo
usar para alterar una cadena, los pongo el ejemplo de lo
que quiero:
char cadena[]="(RANCHO, EL)"
Esto al final debe quedar: char cadena[]="(EL RANCHO)"
pero solamente debe ocurrir cuando las palabras despues de
la coma sea: EL, LOS, LA, LAS. En caso de que yo envie:
(TECOLOTES, EJIDO CAMPECHE) no debe hacer nada; en si
siempre que haya un articulo despues de la coma lo haga,
¿Me pueden decir como le hago por favor? Si tiene un
codigo mejor porque apenas estoy aprendiendo C++. De
antemano muchas gracias anticipadas.

Respuesta Responder a este mensaje
#8 Arturo
28/07/2005 - 22:32 | Informe spam
En si nada mas es una coma, gracias voy a probarlo pero
tengo una duda y que pasa con los parentesis?
Cuántas comas (,) podría llegar a tener una cadena?; si


es sólo una, sería
que buscara la primer coma coincidente, esta búsqueda le


devuelve la
posición donde la encontró, entonces, con base en esa


posición se puede
sustraer la subcadena de la izquierda y la de la derecha,


esas dos
subcadenas las concatena nuevamente pero en orden inverso


y listo, ya está.
Claro que antes de hacer esta concatenación hay que hacer


un ciclo para que
se determine si la segunda subcadena (la de la derecha)


corresponde a un
artículo.

Algo así como:

main()
{
char l_vvcArticulos[4][4] =


{"EL", "LA", "LOS", "LAS"};

char l_vcCadenaInicial[30] = "(RANCHO,


EL)";

char l_vcSubCadenaDer[30]; // SubCadena


después de la coma
(,).

char l_vcCadenaFinal[30];

char *l_pcPosicionComa = NULL;

unsigned int i, l_iPosicionArticulo = 0;


l_pcPosicionComa = strchr(l_vcCadenaInicial, ','); //


Buscar la coma.

l_iPosicionArticulo = l_pcPosicionComa -


l_vcCadenaInicial + 2;

if ((l_pcPosicionComa != NULL) &&
(l_iPosicionComa < strlen(l_vcCadenaInicial))) //


Coma encontrada.
{
strcpy(l_vcSubCadenaDer, l_vcCadenaInicial +


l_iPosicionArticulo);
// Extrae subcadena derecha.

if (l_vcSubCadenaDer[strlen(l_vcSubCadenaDer) -


1] == ')') //
Eliminar el paréntesis.
{
l_vcSubCadenaDer[strlen(l_vcSubCadenaDer) -


1] = 0;

_strupr(l_vcSubCadenaDer); // Convertir a


mayúscula por si
acaso.
}

for (i = 0; i < 4; i++) // Para cada artículo.
if (strcmp(l_vcSubCadenaDer, l_vvcArticulos


[i]) == 0) // Es un
artículo.
break;

if (i < 4) // Es un artículo.
{
strcpy(l_vcCadenaFinal, "(");
strcat(l_vcCadenaFinal + 1, l_vcSubCadenaDer);
strcat(l_vcCadenaFinal, " ");
strncat(l_vcCadenaFinal, l_vcCadenaInicial +


1,
l_pcPosicionComa - l_vcCadenaInicial - 1);

strcat(l_vcCadenaFinal, ")"); // Aquí


queda la cadena final
con el artículo al principio.
}
}
}


Willser F.



"Arturo" escribió


en el mensaje
news:006e01c59380$a4d5a910$
Hola a todos, espero que esten bien, en esta ocasion les
pido su ayuda para que me digan que instrucciones puedo
usar para alterar una cadena, los pongo el ejemplo de lo
que quiero:
char cadena[]="(RANCHO, EL)"
Esto al final debe quedar: char cadena[]="(EL RANCHO)"
pero solamente debe ocurrir cuando las palabras despues de
la coma sea: EL, LOS, LA, LAS. En caso de que yo envie:
(TECOLOTES, EJIDO CAMPECHE) no debe hacer nada; en si
siempre que haya un articulo despues de la coma lo haga,
¿Me pueden decir como le hago por favor? Si tiene un
codigo mejor porque apenas estoy aprendiendo C++. De
antemano muchas gracias anticipadas.


.

Respuesta Responder a este mensaje
#9 Arturo
28/07/2005 - 22:51 | Informe spam
Olvida mi pregunta ya lo revise y si funciono, muchisimas
gracias ahora nada mas tengo que acoplarlo para que este
en una funcion pero eso no creo que me cueste problemas.
La neta mis respetos eres buen programador no que yo
apenas estoy aprendiendo.
Qué pena, pero ahí se me fue mal una variable,

Donde quiera que aparezca la variable "l_iPosicionComa",


se debe reemplazar
por "l_iPosicionArticulo".

Willser F.


"Willser F. González C." escribió


en el mensaje
news:
Cuántas comas (,) podría llegar a tener una cadena?; si




es sólo una, sería
que buscara la primer coma coincidente, esta búsqueda




le devuelve la
posición donde la encontró, entonces, con base en esa




posición se puede
sustraer la subcadena de la izquierda y la de la




derecha, esas dos
subcadenas las concatena nuevamente pero en orden




inverso y listo, ya
está. Claro que antes de hacer esta concatenación hay




que hacer un ciclo
para que se determine si la segunda subcadena (la de la




derecha)
corresponde a un artículo.

Algo así como:

main()
{
char l_vvcArticulos[4][4] =




{"EL", "LA", "LOS", "LAS"};

char l_vcCadenaInicial[30] = "(RANCHO,




EL)";

char l_vcSubCadenaDer[30]; //




SubCadena después de la
coma (,).

char l_vcCadenaFinal[30];

char *l_pcPosicionComa = NULL;

unsigned int i, l_iPosicionArticulo = 0;


l_pcPosicionComa = strchr




(l_vcCadenaInicial, ','); // Buscar la coma.

l_iPosicionArticulo = l_pcPosicionComa -




l_vcCadenaInicial + 2;

if ((l_pcPosicionComa != NULL) &&
(l_iPosicionComa < strlen




(l_vcCadenaInicial))) // Coma encontrada.
{
strcpy(l_vcSubCadenaDer, l_vcCadenaInicial +




l_iPosicionArticulo);
// Extrae subcadena derecha.

if (l_vcSubCadenaDer[strlen(l_vcSubCadenaDer) -




1] == ')') //
Eliminar el paréntesis.
{
l_vcSubCadenaDer[strlen(l_vcSubCadenaDer) -




1] = 0;

_strupr(l_vcSubCadenaDer); // Convertir a




mayúscula por si
acaso.
}

for (i = 0; i < 4; i++) // Para cada artículo.
if (strcmp(l_vcSubCadenaDer, l_vvcArticulos




[i]) == 0) // Es un
artículo.
break;

if (i < 4) // Es un artículo.
{
strcpy(l_vcCadenaFinal, "(");
strcat(l_vcCadenaFinal + 1,




l_vcSubCadenaDer);
strcat(l_vcCadenaFinal, " ");
strncat(l_vcCadenaFinal, l_vcCadenaInicial +




1,
l_pcPosicionComa - l_vcCadenaInicial - 1);

strcat(l_vcCadenaFinal, ")"); // Aquí




queda la cadena final
con el artículo al principio.
}
}
}


Willser F.



"Arturo" escribió




en el mensaje
news:006e01c59380$a4d5a910$
Hola a todos, espero que esten bien, en esta ocasion les
pido su ayuda para que me digan que instrucciones puedo
usar para alterar una cadena, los pongo el ejemplo de lo
que quiero:
char cadena[]="(RANCHO, EL)"
Esto al final debe quedar: char cadena[]="(EL RANCHO)"
pero solamente debe ocurrir cuando las palabras despues




de
la coma sea: EL, LOS, LA, LAS. En caso de que yo envie:
(TECOLOTES, EJIDO CAMPECHE) no debe hacer nada; en si
siempre que haya un articulo despues de la coma lo haga,
¿Me pueden decir como le hago por favor? Si tiene un
codigo mejor porque apenas estoy aprendiendo C++. De
antemano muchas gracias anticipadas.





.

Respuesta Responder a este mensaje
#10 Rodrigo Corral [MVP]
31/07/2005 - 20:39 | Informe spam
La función strncpy puede servirte para tu cometido.


Un saludo
Rodrigo Corral González [MVP]

FAQ de microsoft.public.es.vc++
http://rcorral.mvps.org
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida