Una pregunta en lenguaje C, ¡por favor, ruégueme! !
La clave de este problema es int strcmp (const char *str1, const char *str2), es decir, la comprensión de las funciones de comparación de cadenas.
La comparación de cadenas se basa en el orden lexicográfico de las cadenas.
Dadas dos cadenas, ¿cuál tiene mayor orden lexicográfico? ¡Esto se puede determinar mediante la función strcmp!
La implementación interna de strcmp es aproximadamente la siguiente:
int strcmp (const char *str1, const char *str2)
{
int i;
for(i=0;i { // Los caracteres en las posiciones correspondientes de str1 y str2 son iguales, //Compara el siguiente carácter if(str1[i] ==str2[i ]) continue; // Entre los caracteres en las posiciones correspondientes de str1 y str2, el código ASCII de str1 [i] es mayor que el código ASCII de str2 [i], //Piensa en str1 > str2, devuelve 1 else if(str1[i]>str2[i]) devuelve 1; // Entre los caracteres en las posiciones correspondientes de str1 y str2, str1 [i] El código ascii es menor que el código ascii de str2 [i], //Piensa en str1 < str2, devuelve -1 else if(str1[i] } // Si la ejecución llega a este punto, significa que los caracteres en al menos una cadena en str1 y str2 se ha utilizado en la comparación, //Es decir, al menos una de str1[i] == '\0' y str2[i] == ' \0' es verdadero //Si los caracteres en str1 y str2 se usan simultáneamente en la comparación, se acabó y no se encuentran caracteres diferentes en las posiciones correspondientes. // Considere str1 y str2 iguales, devuelva 0 if(str1[i] == '\0' && str2 [i] == '\0') devuelva 0; / /Si los caracteres en str1 se usan al mismo tiempo durante la comparación y no se encuentran caracteres diferentes en las posiciones correspondientes de str2 //Pero hay caracteres adicionales en str2 (como str1=" abc", str2="abcde", str2 tiene más "de" que str1) //Piensa en str1 < str2, devuelve -1 si no(str1[i] = = '\0') return -1; //Si los caracteres en str2 se usan al mismo tiempo durante la comparación y corresponden a str1 No se encontraron caracteres diferentes en la posición //Pero hay caracteres adicionales en str1 (como str1="abcde", str2="abc", str1 tiene más "de" que str2) //Piensa en str1 > str2, devuelve 1 else if(str2[i]== '\0') devuelve 1; } Si comprendes el significado de la función strcmp , su programa será más fácil de entender: #include #include main() { int i; char s[10],t[10]; // Primero lee una cadena, guarda en t obtiene(t); para(i=0;i<2;i++) { //Continuar leyendo la cadena y guardarla temporalmente en s gets(s); //Comparativamente solo ahora La cadena leída s y la cadena almacenada en t, //Si la cadena en t es lexicográficamente más pequeña que la cadena en s //(ya deberías entender el ¿Qué significa que una cadena es lexicográficamente más pequeña que otra cadena?) //Copiar el contenido de la cadena s a la cadena t (sí, la función strcpy es hacer esto) if (strcmp(t,s)<0) //A través de esta copia, la cadena guardada en t se cambia exitosamente a su actual Entre las cadenas que se han ingresado / /¡El más grande en orden lexicográfico! ! ! strcpy(t,s); } //En este punto debes saber que las cadenas guardadas en t son todas las cadenas que ingresaste. ¡El más grande en orden lexicográfico! ! printf("%s\n",t); }