[C con Clase] ¿Que es mas recomendable ? (punteros)

Steven R. Davidson vze266ft en verizon.net
Mar Nov 21 03:21:58 CET 2006


Hola Rodolfo,

rodolfo rosso paz wrote:
> Muchas gracias Salvador y Steven por las molestias que se toman con la 
> lista.
> 
> Hola a todos, gracias por atender mis consultas, quisiera saber si 
> cualquiera de estas dos opciones es válida o si una es preferible a
> la otra, las he probado y las dos funcionan, pero a lo mejor una no
> es muy correcta, por estar manipulando posiciones de memoria con 
> datos desconocidos.
> 

Veamos el código.

> /* Funcion : BuscaCaracter
>     Recibe un puntero a char y un char
>     devuelve la posision de encuentro o -1 si no encuentra */
> 
> int BuscaCaracter(char* pCadena, char cbCaracter)
> {
>     int nPosicion = 1;
> 
>     // ¿ que es mejor ? ¿esto?
>     while(*pCadena   &&   *pCadena++  !=  cbCaracter)   nPosicion++;
>     return((*pCadena   ||   *(pCadena-1) == cbCaracter) ?  nPosicion  :  
> -1);
> 
>     // ¿o esto?  ¿ es valido retroceder una mas del limite de pCadena, 
> mientras no le vaya a
>                         hacer ninguna modificación, o no es lícito  ?
>     pCadena--;
>     while(*++pCadena && *pCadena != cbCaracter) nPosicion++;
>     return(*pCadena ? nPosicion : -1);
> }
> 

Cualquiera de las dos formas es correcta, aunque recomiendo cambiar el 
algoritmo para que no tengas que hacer otra comprobación en 'return'. Al 
comenzar, partimos de la idea de que no hemos encontrado el carácter a 
buscar. Para representar esta idea, 'nPosicion' contiene el valor de -1. 
Si la cadena es nula, entonces el bucle termina nada más empezar, y 
'nPosicion' contiene el valor de -1 indicando que no se encontró.

Para la función 'BuscaCaracter()', sugiero declarar 'const char *', para 
dejar claro que no nos interesa modificar el contenido de la cadena.


Espero haber aclarado la inquietud.

Steven







Más información sobre la lista de distribución Cconclase