Uso di strcmp()
Fa parte della sezione Logica e flusso del percorso C di Coddy. Lezione 18 di 63.
Hai imparato a concatenare le stringhe con strcat(), ma cosa succede se devi determinare se due stringhe contengono esattamente lo stesso testo? In C, non puoi usare l’operatore di uguaglianza (==) per confrontare le stringhe, perché confronta solo gli indirizzi di memoria, non il contenuto effettivo.
La funzione strcmp() della libreria <string.h> risolve questo problema confrontando due stringhe carattere per carattere. Esegue quella che viene chiamata comparazione lessicografica — in pratica, confronta le stringhe nell’ordine del dizionario.
#include <stdio.h>
#include <string.h>
char word1[] = "apple";
char word2[] = "apple";
int result = strcmp(word1, word2); // Restituisce 0 (le stringhe sono uguali)La funzione strcmp() restituisce tre tipi diversi di valori: restituisce 0 se le stringhe sono identiche, un valore negativo se la prima stringa viene prima della seconda in ordine alfabetico e un valore positivo se la prima stringa viene dopo la seconda in ordine alfabetico.
Questa funzione è essenziale per prendere decisioni in base al contenuto delle stringhe, ad esempio per convalidare l’input dell’utente, ordinare dati testuali o implementare funzionalità di ricerca nei tuoi programmi.
Sfida
FacileScrivi un programma in C che implementi un semplice sistema di verifica delle password usando la funzione strcmp(). Il tuo programma dovrebbe:
- Leggere un intero
nche rappresenta il numero di tentativi di accesso da elaborare - Per ogni tentativo di accesso:
- Leggere un nome utente dall'input
- Leggere una password dall'input
- Usare
strcmp()per confrontare il nome utente con "admin" - Usare
strcmp()per confrontare la password con "secret123" - Stampare il messaggio appropriato in base ai risultati del confronto
- Dopo aver elaborato tutti i tentativi, contare e visualizzare quanti accessi sono riusciti
La logica di convalida dell'accesso dovrebbe essere:
- Se sia il nome utente sia la password sono corretti: stampare "Login successful"
- Se il nome utente è corretto ma la password è errata: stampare "Invalid password"
- Se il nome utente è errato ma la password è corretta: stampare "Invalid username"
- Se sia il nome utente sia la password sono errati: stampare "Invalid credentials"
Ricordati di includere l'header <string.h> per usare la funzione strcmp().
L'output dovrebbe mostrare i risultati nel seguente formato:
[Login result message]
[Login result message]
...
Total successful logins: [count]Per esempio, se l'input è:
4
admin
secret123
user
password
admin
wrong
guest
secret123L'output dovrebbe essere:
Login successful
Invalid credentials
Invalid password
Invalid username
Total successful logins: 1Questa sfida verifica la tua comprensione dell'uso di strcmp() per confrontare stringhe e determinarne l'uguaglianza, dell'implementazione della logica condizionale in base ai risultati del confronto tra stringhe e del conteggio delle occorrenze in base agli esiti del confronto.
Provalo tu
#include <stdio.h>
#include <string.h>
int main() {
int n;
scanf("%d", &n);
char username[100];
char password[100];
int successful_logins = 0;
// TODO: Write your code here
// Process each login attempt using strcmp() function
// Compare username with "admin" and password with "secret123"
// Print appropriate messages and count successful logins
printf("Total successful logins: %d\n", successful_logins);
return 0;
}Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Logica e flusso
1Fondamenti dei puntatori
Che cos’è un puntatore?Dichiarare i puntatoriL’operatore di indirizzo (&)L’operatore di dereferenziazione (*)Puntatori NULLRiepilogo: nozioni di base sui puntatori4Progetto: Utility di testo semplice
Panoramica del progettoConteggio dei caratteri2Puntatori e array
I nomi degli array come puntatoriElementi degli array e puntatoriAritmetica dei puntatoriConfrontare i puntatoriRiepilogo: attraversamento di un array con i puntatori5Puntatori e funzioni
Passaggio per valorePassare puntatori alle funzioniModificare le variabili tramite puntatoriUn esempio classico: scambiare valoriPassare array alle funzioniRiepilogo: argomenti puntatore nelle funzioni3Array di caratteri e stringhe
Stringhe come array di charIl terminatore nullInput di stringhe con scanfUso di strlen()Uso di strcpy()Uso di strcat()Uso di strcmp()Riepilogo: funzioni di base per le stringhe6Gestione della memoria
Memoria Stack vs. HeapAllocazione dinamica - malloc()Usare sizeof() per l'allocazioneVerificare il fallimento dell'allocazioneLiberare la memoria con free()Allocare con calloc()Riepilogo: array dinamico9Progetto: Inserimento semplice di un contatto
Progetto: Definire una struct ContattoFunzione per creare un contattoEsercitati da solo: Compilatore C online