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.
Wyzwanie
ŁatwyNapisz program w C, który implementuje prosty system weryfikacji hasła za pomocą funkcji strcmp(). Twój program powinien:
- Wczytać liczbę całkowitą
noznaczającą liczbę prób logowania do przetworzenia - 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
- 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
secret123Wynik powinien być następujący:
Login successful
Invalid credentials
Invalid password
Invalid username
Total successful logins: 1To 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;
}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
1Podstawy wskaźników
Czym jest wskaźnik?Deklarowanie wskaźnikówOperator pobrania adresu (&)Operator dereferencji (*)Wskaźniki NULLPodsumowanie: podstawy wskaźników4Projekt: Proste narzędzie tekstowe
Przegląd projektuLiczenie znaków2Wskaźniki i tablice
Nazwy tablic jako wskaźnikiElementy tablic — wskaźnikiArytmetyka wskaźnikówPorównywanie wskaźnikówPodsumowanie: przechodzenie po tablicy za pomocą wskaźników5Wskaźniki i funkcje
Przekazywanie przez wartośćPrzekazywanie wskaźników do funkcjiModyfikowanie zmiennych za pomocą wskaźnikówKlasyczny przykład: zamianaPrzekazywanie tablic do funkcjiPowtórka: argumenty wskaźnikowe funkcji8Struktury i wskaźniki
Wskaźniki do strukturOperator strzałki (->)Przekazywanie struktur przez wartośćPrzekazywanie wskaźników do strukturDynamiczna alokacja strukturPodsumowanie: modyfikowanie struktury — wskaźnik11Końcowe zadania powtórkowe
Powtórka: dynamiczne łączenie ciągów znakówPowtórka: tablica strukturPowtórka: licznik częstotliwości słów3Tablice znaków i ciągi znaków
Ciągi znaków jako tablice charZnak końca ciąguWczytywanie ciągu za pomocą scanfUżywanie strlen()Używanie strcpy()Używanie strcat()Używanie strcmp()Podsumowanie: podstawowe funkcje do obsługi ciągów znakówPoćwicz samodzielnie: Kompilator C online