elrincondelc.com
Inicio :: Foros
Usuario: Clave: Regístrate
Salir


Comparar cadenas

 
Publicar Nuevo Tema   Responder al Tema    Índice del Foro elrincondelc.com -> Principiantes C/C++
Ver tema anterior :: Ver siguiente tema  
Autor Mensaje
fido



Registrado: 20 Ene 2005
Mensajes: 4

MensajePublicado: 20/01/2005 8:03 am Responder citando
Título: Comparar cadenas

Holas

Soy mas bien nuevo en esto de C, y tengo q hacer una practica pero nose muy bien como hacerla...
La practica va de una calculadora, donde hay q pasarle por parametros la suma,resta etc... ejemplo calc 7 + 3
el problema esta en q tengo q hacer una funcion para comparar dos strings...
uno seria el signo(q se le pasa por teclado) y otro q supongo serian los signos q se pueden utlizar (+,-,*,/...) y entonces depende de cada signo lo mando a la funcion correspondiente...

main(int argc, char *argv[])
{
signo = argv[2];

compar(signo, ? );
}

int compar(char *s, char *t)
{
for(i=0;i<strlen(s);i++)
{
s[i]==t[i]
}
}

int sum(int a, int b)
{
int res;
res = a+b;
printf("%d",res);
}

la comparacion tiene q ser caracter por caracter

la cuestion es q no entiendo como compararia el singo (q le paso por teclado) con la otra cadena q supuestamente tendra los singos ...
nose si podria hacer un array con los signos y despues compararla con la cadena ...

Bueno, si alguien ha entendido mas o menos lo q necesito, y me puede ayudar muchas gracias..

una cosa, lo estoy haciendo en linux.. nose si tendra alguna diferencia con windows.

Un saludo
Volver arriba
Ver perfil del usuario Enviar mensaje privado
quique



Registrado: 30 Mar 2004
Mensajes: 720
Ubicación: Por ahí

MensajePublicado: 21/01/2005 6:31 am Responder citando
Título:

revisa la ayuda de las siguientes funciones:
strcmp: compara dos cadenas de caracteres enteras
strchr: busca donde esta el primer caracter (parm) en un string

Seguro que necesitas alguna de ese tipo Wink

Salu2
Volver arriba
Ver perfil del usuario Enviar mensaje privado
rir3760



Registrado: 01 Oct 2004
Mensajes: 7534
Ubicación: Mexico

MensajePublicado: 21/01/2005 6:38 am Responder citando
Título:

Utiliza un switch para comparar argv[2][0] con los caracteres '+', '-', etc.

Código:
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[]) {
   
   int op1 = atoi(argv[1]);
   int op2 = atoi(argv[3]);
   char operador = argv[2][0];
   
   switch (operador){
   case '+':
      printf("%d+%d=%d", op1, op2, op1+op2);
      break;
   case '*':
      printf("%d*%d=%d", op1, op2, op1*op2);
      break;
   default:
      printf("El operador \'%c\' no es valido!\n", operador);
      break;
   }
   
   return EXIT_SUCCESS;
}


Un saludo
Volver arriba
Ver perfil del usuario Enviar mensaje privado Enviar correo
fido



Registrado: 20 Ene 2005
Mensajes: 4

MensajePublicado: 23/01/2005 4:33 pm Responder citando
Título: gracias

gracias por responder... pero..

quique el problema es q no puedo hacer servir esas funciones.... tengo q comparar caracter a caracter...

rir3760 si si, asi lo he hecho y me funciona mu bien...

Pero hay otro problemita.. Razz

necesito poner Pej: fact 5

entonces como haria para cuando me pasen en el primer parametro fact se vaya a tal funcion.... he hecho una cosa pero solo me verifica el primer caracter ... si pongo flju 5 tamb me lo coge...


char op[] ="fact"

for(i=0;i<strlen(p1);i++)
{
// Comprovar q el primer parametro sea un digito
if(esdigit(p1[i])==1)
{
a = atoi(argv[1]);
char *operador = argv[2];
b = atoi(argv[3]);

for(j=0;j<strlen(operador);j++)
{
switch (operador[j])
{
case '+':sum(a,b);break;
case '-':res(a,b);break;
case ':':divi(a,b);break;
case 'x':mult(a,b);break;
}
}
}
else //Sino es digito comprovar si es fact
{
if(compar(p1,op)!=0)
printf("has escrito fact juas juas\n");
}
}

// Funcion para comprovar si el parametro es un entero
int esdigit(char c)
{
if (isdigit(c)==1)
{
return 1;
}
else
return 0;
}

// Funcion para comparar dos cadenas
int compar(char *s, char*t)
{
int i;
if (strlen(s) == strlen(t))
{
for(i=0;i<strlen(s);i++)
{
if(s[i]==t[i])
{
while(i=strlen(s))
{
return 1;
}
}
else
return 0;
}
}
else
return 0;
}

Esto es lo q tengo... y otra cosa... la funcion esdigit no me funciona bien... porq cuando hago una suma y pongo 4688 + 8 me imprime 4 veces el resultado, y creo q es porq el es digit compara caracteres entonces compara tantas veces como caracteres hayan....

Bueno si alguien me puede ayudar muchas gracias....

Y gracias a quique y rir3760
[/b]
Volver arriba
Ver perfil del usuario Enviar mensaje privado
rir3760



Registrado: 01 Oct 2004
Mensajes: 7534
Ubicación: Mexico

MensajePublicado: 24/01/2005 7:31 am Responder citando
Título:

Código:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int comparar(char cadena1[], char cadena2[]);
int es_numero(char cadena[]);

int main(int argc, char *argv[]) {
   
   int op1, op2;
   char operador;
   
   /* verificar si el primer argumento es "fact" ... */
   if ((argc == 3) && (comparar(argv[1], "fact") == 0)){
     
      if (es_numero(argv[2])){
         op1 = atoi(argv[2]); /* unico operando */
         printf("Aqui realizamos la operacion fact(%d)\n", op1);
         return EXIT_SUCCESS;
      }else {
         printf("La operacion %s %s no es valida!\n", argv[1], argv[2]);
         return EXIT_FAILURE;
      }
   }
   
   /* validar argumentos para 'op1 operando op2' */
   
   /* validar numero de argumentos y operador */
   if ((argc != 4) || (strlen(argv[2]) != 1)){
      puts("Operacion no valida!\n");
      return EXIT_FAILURE;
   }
   
   /* validar operando1 y operando2 */
   if ((!es_numero(argv[1])) || (!es_numero(argv[3]))){
      puts("Operacion no valida!\n");
      return EXIT_FAILURE;
   }
   
   /* procesar operacion op1 operando op2 */
   op1 = atoi(argv[1]);
   op2 = atoi(argv[3]);
   operador = argv[2][0];
   
   switch (operador){
   case '+':
      printf("%d+%d=%d", op1, op2, op1+op2);
      break;
   case '*':
      printf("%d*%d=%d", op1, op2, op1*op2);
      break;
   default:
      printf("El operador \'%c\' no es valido!\n", operador);
      break;
   }
   
   return EXIT_SUCCESS;
}

/* funcion que compara cadena1 con cadena2 y devuelve: */
/* 0 si las cadenas son iguales                        */
/* 1 si las cadenas son diferentes                     */

int comparar(char cadena1[], char cadena2[]){
   
   int i;
   
   i = 0;
   while ((cadena1[i] == cadena2[i]) && (cadena1[i] != '\0'))
      i++;
   
   if ((cadena1[i] == '\0') && (cadena2[i] == '\0'))
      return 0;
   else
      return 1;
}

/* funcion que verifica si todos los caracteres de cadena estan  */
/* en rango 0..9, en ese caso devuelve 1, en caso contrario 0    */

int es_numero(char cadena[]){
   
   int i, bandera = 1;
   
   i = 0;
   while (cadena[i] != '\0'){
      /* si cadena[i] no esta en el rango 0..9 */
      if (cadena[i] < '0' || cadena[i] > '9'){
         bandera = 0;
         break;
      }
      i++;
   }
   
   return bandera;
}


Un saludo
Volver arriba
Ver perfil del usuario Enviar mensaje privado Enviar correo
Mostrar mensajes anteriores:   
Publicar Nuevo Tema   Responder al Tema    Índice del Foro elrincondelc.com -> Principiantes C/C++
Página 1 de 1 Todas las horas están en GMT - 8 Horas

 
Saltar a:  
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com, 1999-2007

Un proyecto de UrlanHeat.com