[C con Clase] EXISTE LA FUNCION "STRCMPI"

Zaka E-Lab shanatorio en gmail.com
Jue Jun 5 17:09:54 CEST 2008


[Webmaster]_Yoel_Villarreal escribió:
> No entendi para que inicializastes en tu codigo???:
> 
> char letra[]="o"

Como va a ser comparado con una cadena de un carácter, el tamaño que
debe tener la cadena es de [1], por lo que cualquier inicialización
con un solo carácter es válida. ¿Por qué es la o y no otro carácter?
No lo se, no importa.

> Que ademas te falto el (;) al final de la declaracion sin mencionar {}
> (Deberia ser asi: char letra[]={"o"}; )

Está mal esta corrección, una cadena se inicializa de la forma que ha
hecho, y en otro caso tendrías que usar la semántica de arrays, que
sería como sigue:

char letra[] = {'o'};//Ojo a las comillas simples y no dobles para
caracteres.

Además, lo anterior no es una cadena válida en C/C++ ya que no termina
en 0.

> si por demas comparas la entrada con el caracter "s" o "S" ???
> 
> Ademas letra[] tiene en esa declaracion dos elementos tipo char 
> ['o','\0'] ... no se si en la comparacion te devuelva verdadero 
> comparando esa cadena con "s" o "S" ...

La comparación está bien hecha. Las CADENAS siempre terminan en 0, por
lo que "s" = {'s','\0'} y lo mismo con "S".

> Anyway... yo trate de compilarlo en mi Debian usando GCC y pues el 
> codigo tuyo (Dati Young Clear) estaba muy dependiente...

Al final de este correo he dejado una versión compilada con gcc sobre
Ubuntu, hay algunos cambios pero en esencia es lo mismo.

#include <cstdio>
#include <cstring>

using namespace std;

int main(void){
     char letra[]=" ";

     printf("Ingrese una letra:\n");

     fflush (stdin);

     if (fgets (letra,2,stdin) == NULL)
         printf ("Error en la lectura\n");

     if((strcmp(letra, "s")==0) or (strcmp(letra, "S")==0))
         printf("La letra ingresada coincide \n");
     else
         printf("Las letras no coinciden\n");

     return 0;
}

Zaka.




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