Menu
Coddy logo textTech

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.

challenge icon

Sfida

Facile

Scrivi un programma in C che implementi un semplice sistema di verifica delle password usando la funzione strcmp(). Il tuo programma dovrebbe:

  1. Leggere un intero n che rappresenta il numero di tentativi di accesso da elaborare
  2. 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
  3. 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
secret123

L'output dovrebbe essere:

Login successful
Invalid credentials
Invalid password
Invalid username
Total successful logins: 1

Questa 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;
}
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Logica e flusso

Esercitati da solo: Compilatore C online