codigo c string strcmp

codigo - ¿Cómo comparo correctamente las cadenas?



string compare c (7)

Estoy tratando de obtener un programa que permita a un usuario ingresar una palabra o carácter, almacenarlo y luego imprimirlo hasta que el usuario lo vuelva a escribir y salir del programa. Mi código se ve así:

#include <stdio.h> int main() { char input[40]; char check[40]; int i=0; printf("Hello!/nPlease enter a word or character:/n"); gets(input); printf("I will now repeat this until you type it back to me./n"); while (check != input) { printf("%s/n", input); gets(check); } printf("Good bye!"); return 0; }

El problema es que sigo recibiendo la impresión de la cadena de entrada, incluso cuando la entrada del usuario (verificación) coincide con la original (entrada). ¿Estoy comparando los dos incorrectamente?


Lamentablemente no puede usar strcmp desde <cstring> porque es un encabezado C ++ y específicamente dijo que es para una aplicación C. Tuve el mismo problema, así que tuve que escribir mi propia función que implementa strcmp :

int strcmp(char input[], char check[]) { for (int i = 0;; i++) { if (input[i] == ''/0'' && check[i] == ''/0'') { break; } else if (input[i] == ''/0'' && check[i] != ''/0'') { return 1; } else if (input[i] != ''/0'' && check[i] == ''/0'') { return -1; } else if (input[i] > check[i]) { return 1; } else if (input[i] < check[i]) { return -1; } else { // characters are the same - continue and check next } } return 0; }

Espero que esto te sirva bien.


No puede (de manera útil) comparar cadenas usando != O == , necesita usar strcmp :

while (strcmp(check,input) != 0)

La razón de esto es porque != Y == solo compararán las direcciones base de esas cadenas. No el contenido de las cuerdas en sí.


No puede comparar matrices directamente como esta

array1==array2

Debes compararlos char-by-char; para esto puede usar una función y devolver un valor booleano (True: 1, False: 0). Entonces puede usarlo en la condición de prueba del ciclo while.

Prueba esto:

#include <stdio.h> int checker(char input[],char check[]); int main() { char input[40]; char check[40]; int i=0; printf("Hello!/nPlease enter a word or character:/n"); scanf("%s",input); printf("I will now repeat this until you type it back to me./n"); scanf("%s",check); while (!checker(input,check)) { printf("%s/n", input); scanf("%s",check); } printf("Good bye!"); return 0; } int checker(char input[],char check[]) { int i,result=1; for(i=0; input[i]!=''/0'' || check[i]!=''/0''; i++) { if(input[i] != check[i]) { result=0; break; } } return result; }


Ok algunas cosas: gets es inseguro y debería ser reemplazado por fgets(input, sizeof(input), stdin) para que no se produzca un desbordamiento de buffer.

Luego, para comparar cadenas, debe usar strcmp , donde un valor de retorno de 0 indica que las dos cadenas coinciden. El uso de los operadores de igualdad (es decir != ) Compara la dirección de las dos cadenas, a diferencia de las char individuales dentro de ellas.

Y también tenga en cuenta que, si bien en este ejemplo no causará problemas, fgets almacena el carácter de nueva línea, ''/n'' en los búferes también; gets() no. Si comparas la entrada del usuario de fgets() a un literal de cadena como "abc" , nunca coincidiría (a menos que el buffer fuera demasiado pequeño para que ''/n'' no encajara en él).

EDITAR: y golpeado por el súper rápido Mysticial una vez más.


Siempre que intentes comparar las cuerdas, compáralas con respecto a cada personaje. Para esto puede usar una función de cadena incorporada llamada strcmp (input1, input2); y debe usar el archivo de encabezado llamado #include<string.h>

Prueba este código:

#include<stdio.h> #include<stdlib.h> #include<string.h> int main() { char s[]=""; char s1[200]; printf("Enter the string to be checked/n");//enter the input string scanf("%s",s1); if(strcmp(s,s1)==0)//compare both the strings { printf("Both the Strings match/n"); } else { printf("Entered String does not match/n"); } system("pause"); }


Use strcmp .

Esto está en la biblioteca string.h , y es muy popular. strcmp devuelve 0 si las cadenas son iguales. Vea this para una mejor explicación de lo que devuelve strcmp .

Básicamente, tienes que hacer:

while (strcmp(check,input) != 0)

o

while (!strcmp(check,input))

o

while (strcmp(check,input))

Puede verificar this , un tutorial sobre strcmp .


#include<stdio.h> #include<string.h> int main() { char s1[50],s2[50]; printf("Enter the character of strings: "); gets(s1); printf("/nEnter different character of string to repeat: /n"); while(strcmp(s1,s2)) { printf("%s/n",s1); gets(s2); } return 0; }

Esta es una solución muy simple en la que obtendrá su resultado como lo desee.