Menu
Coddy logo textTech

Używanie strcmp()

Część sekcji Logika i sterowanie przepływem ścieżki C w Coddy. Lekcja 18 z 63.

Nauczyłeś się łączyć ciągi znaków za pomocą strcat(), ale co zrobić, jeśli chcesz ustalić, czy dwa ciągi znaków zawierają dokładnie ten sam tekst? W C nie możesz użyć operatora równości (==) do porównywania ciągów znaków, ponieważ porównuje on tylko adresy pamięci, a nie faktyczną zawartość.

Funkcja strcmp() z biblioteki <string.h> rozwiązuje ten problem, porównując dwa ciągi znaków znak po znaku. Wykonuje tak zwane porównanie leksykograficzne — zasadniczo porównuje ciągi znaków w kolejności słownikowej.

#include <stdio.h>
#include <string.h>

char word1[] = "apple";
char word2[] = "apple";
int result = strcmp(word1, word2);  // Zwraca 0 (ciągi znaków są równe)

Funkcja strcmp() zwraca trzy różne typy wartości: zwraca 0, jeśli ciągi znaków są identyczne, wartość ujemną, jeśli pierwszy ciąg znaków występuje przed drugim w kolejności alfabetycznej, oraz wartość dodatnią, jeśli pierwszy ciąg znaków występuje po drugim w kolejności alfabetycznej.

Ta funkcja jest niezbędna do podejmowania decyzji na podstawie zawartości ciągów znaków, na przykład podczas sprawdzania poprawności danych wejściowych użytkownika, sortowania danych tekstowych lub implementowania funkcji wyszukiwania w programach.

challenge icon

Wyzwanie

Łatwy

Napisz program w C, który implementuje prosty system weryfikacji hasła za pomocą funkcji strcmp(). Twój program powinien:

  1. Wczytać liczbę całkowitą n oznaczającą liczbę prób logowania do przetworzenia
  2. Dla każdej próby logowania:
    • Wczytać nazwę użytkownika z wejścia
    • Wczytać hasło z wejścia
    • Użyć funkcji strcmp(), aby porównać nazwę użytkownika z "admin"
    • Użyć funkcji strcmp(), aby porównać hasło z "secret123"
    • Wyświetlić odpowiedni komunikat na podstawie wyników porównania
  3. Po przetworzeniu wszystkich prób policzyć i wyświetlić liczbę udanych logowań

Logika weryfikacji logowania powinna być następująca:

  • Jeśli zarówno nazwa użytkownika, jak i hasło są poprawne: wyświetlić "Login successful"
  • Jeśli nazwa użytkownika jest poprawna, ale hasło jest niepoprawne: wyświetlić "Invalid password"
  • Jeśli nazwa użytkownika jest niepoprawna, ale hasło jest poprawne: wyświetlić "Invalid username"
  • Jeśli zarówno nazwa użytkownika, jak i hasło są niepoprawne: wyświetlić "Invalid credentials"

Pamiętaj, aby dołączyć nagłówek <string.h>, aby użyć funkcji strcmp().

Wynik powinien wyświetlać rezultaty w następującym formacie:

[Login result message]
[Login result message]
...
Total successful logins: [count]

Na przykład, jeśli dane wejściowe to:

4
admin
secret123
user
password
admin
wrong
guest
secret123

Wynik powinien być następujący:

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

To wyzwanie sprawdza, czy rozumiesz, jak używać funkcji strcmp() do porównywania ciągów znaków pod kątem równości, implementować logikę warunkową na podstawie wyników porównywania ciągów znaków oraz zliczać wystąpienia na podstawie wyników porównań.

Spróbuj swoich sił

#include <stdio.h>
#include <string.h>

int main() {
    int n;
    scanf("%d", &n);
    
    char username[100];
    char password[100];
    int successful_logins = 0;
    
    // TODO: Napisz tutaj swój kod
    // Przetwórz każdą próbę logowania za pomocą funkcji strcmp()
    // Porównaj username z "admin", a password z "secret123"
    // Wyświetl odpowiednie komunikaty i zlicz udane logowania
    
    printf("Total successful logins: %d\n", successful_logins);
    
    return 0;
}
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Logika i sterowanie przepływem

Poćwicz samodzielnie: Kompilator C online