C/Visual C - Concatenar un espacio a una cadena de caracteres

 
Vista:

Concatenar un espacio a una cadena de caracteres

Publicado por chuy (3 intervenciones) el 17/04/2006 21:10:45
Hola, esta es la descripcion de mi codigo:

char *newChain;
char *newChainPass;

while (*(newChain) != NULL) {
if (*(newChain)==' ') {
newChain++;
}
else {
*(newChainPass) = ' ';
newChainPass++;
*(newChainPass) = *(newChain);
newChain++;
newChainPass++;
}
}


NOTA: La variable apuntador es una cadena de caracteres que pude incluir uno o varios espacios. Lo que estoy tratando de hacer es poner un espacio entre cada palabra de la cadena.

La intruccion *(newChainPass) = ' '; me marca un error y el programa para de ejecutarse.

Alguien pude ayudarme para decifrar como asignar un espcio en blanco a una variable apuntador... Espero me puedan ayudar. Gracias por adelantado.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Concatenar un espacio a una cadena de caractere

Publicado por fernando.gomez (1603 intervenciones) el 18/04/2006 01:11:39
¿Estás consciente de que tu código genera comportamiento indefinido?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Concatenar un espacio a una cadena de caractere

Publicado por fernando.gomez (1603 intervenciones) el 18/04/2006 06:21:49
Pero a ver, no entiendo tu código. Vamos paso por paso a ver si te entendí.

while (*(newChain) != NULL)

Primero, no es necesario el paréntesis. Es decir,

while (*newChain != NULL) { ... }

funciona bien. En fin. Entiendo que con esto, lo que quieres hacer es iterar sobre newChain (ASUMIENDO que tiene un valor válido) hasta que encuentre el caracter nulo ( *newChain devuelve el caracter al que está apuntando la variable).

if (*newChain==' ') { //quito el paréntesis por legibilidad
newChain++;
}

Esto en pseudocódigo es lo siguiente: Si el caracter actual es un espacio en blanco, apunta al siguiente caracter (newChain++) e itera de nuevo. En caso contrario:

*newChainPass = ' ';

cambia el caracter al que apunta newChainPass a un espacio en blanco. Pero aquí habría que asumir primero que newChainPass apunta a un búfer en memoria válido. Dices que aquí te está lanzando una excepción, quizás sea que no apunta a un búfer válido -comportamiento indefinido. Sigamos.

newChainPass++;

Apunta al siguiente caracter de newChainPass.

*newChainPass = *newChain;

Este siguiente caracter tendrá el valor del caracter al que apunta newChain.

newChain++;
newChainPass++;

Apunta al siguiente caracter del búfer newChain y newChainPass.

Ahora bien, dices que lo que estás "tratando de hacer es poner un espacio entre cada palabra de la cadena". Mis dudas:

1. ¿Quién tiene el búfer de palabras que tratas de separar? Supongo que newChain...
2. ¿Cómo distingues cuándo termina una palabra y comienza otra? Supongo que lo que intentas hacer es que, por ejemplo, la cadena "estaesalgunacadena" se convierta en "esta es alguna cadena", ¿no?
3. ¿Cuál es la función de newChainPass?

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar