Comparar cadenas

Si eres principiante y tienes alguna consulta entra en este foro.
Avatar de Usuario
fido
Mensajes: 4
Registrado: 20/01/2005 12:00 am

Comparar cadenas

Mensajepor fido » 20/01/2005 8:03 am

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
Avatar de Usuario
quique
Mensajes: 720
Registrado: 30/03/2004 12:00 am
Ubicación: Por ahí

Mensajepor quique » 21/01/2005 6:31 am

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 ;-)

Salu2
Avatar de Usuario
rir3760
Mensajes: 7553
Registrado: 01/10/2004 11:00 pm
Ubicación: Mexico

Mensajepor rir3760 » 21/01/2005 6:38 am

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

Código: Seleccionar todo

#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
Avatar de Usuario
fido
Mensajes: 4
Registrado: 20/01/2005 12:00 am

gracias

Mensajepor fido » 23/01/2005 4:33 pm

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.. :P

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]
Avatar de Usuario
rir3760
Mensajes: 7553
Registrado: 01/10/2004 11:00 pm
Ubicación: Mexico

Mensajepor rir3760 » 24/01/2005 7:31 am

Código: Seleccionar todo

#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 a “Principiantes C/C++”

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados