Zalecane, 2024

Wybór Redakcji

Różnica między tablicą znaków a ciągiem znaków

C ++ obsługuje zarówno tablicę znaków, jak i łańcuch znaków, ponieważ C ++ przynosi znaczne korzyści z ich używania. Ale niezdolność do działania na tablicy znaków powoduje rozwój łańcucha klas. Zarówno tablica znaków, jak i ciąg zawierają sekwencję znaków. Ale podstawową różnicą między tablicą znaków a ciągiem jest to, że "tablica znaków" nie może być operowana standardowymi operatorami, podczas gdy obiekty "łańcuchowe" mogą być obsługiwane za pomocą standardowych operatorów. Przyjrzyjmy się innym różnicom między tablicą znaków a ciągiem znaków.

Wykres porównania

Podstawa do porównaniaTablica znakówStrunowy
PodstawowyTablica znaków to zbiór zmiennych, o typie danych znakowych.String jest klasą, a zmienne string są obiektem klasy "string".
Składniachar nazwa_macierzy [rozmiar];ciąg nazwa_ciągu;
IndeksowanieDo pojedynczego znaku w tablicy znaków można uzyskać dostęp poprzez indeks w tablicy.W ciągu znaków można uzyskać dostęp do określonego znaku za pomocą funkcji "nazwa_ścieżki.charAt (indeks)".
Typ danychTablica znaków nie definiuje typu danych.Łańcuch definiuje typ danych w C ++.
OperatorzyOperatory w C ++ nie mogą być stosowane w tablicy znaków.Możesz zastosować standardowy operator C ++ w ciągu znaków.
GranicaGranice tablic są łatwo przekraczane.Granice nie zostaną przekroczone.
DostępSzybki dostęp.Powolny dostęp.


Definicja tablicy znaków

Tablica znaków jest zbiorem zmiennych typu danych "char"; może to być tablica jednowymiarowa lub tablica dwuwymiarowa. Jest również nazywany "łańcuchem zakończonym znakiem NUL". Tablica znaków jest sekwencją znaków przechowywanych w kolejnych adresach pamięci. W tablicy znaków do określonego znaku można uzyskać dostęp poprzez jego indeks. "Znak zerowy" kończy tablicę znaków ".

Weźmy przykład tablicy znaków: -

 char nazwa [] = {"A", "j", "a", "y", "\ 0"}; lub char name [] = "Ajay"; 

W tym przypadku "char" jest typem danych znakowych, "name" jest nazwą zmiennej tablicy znaków. Pokazałem dwa sposoby inicjowania tablicy znaków. W pierwszej metodzie wyraźnie wspomniano o wartości zerowej, aw drugiej metodzie kompilator automatycznie wstawia wartość null.

Koniec łańcucha jest zawsze znakiem pustym; jest to znak kończący w tablicy znaków. Tablica znaków nie jest wbudowanym typem danych; tworzymy tablicę znaków, deklarując ją. Nie można stosować standardowych operatorów w tablicy znaków. Do operowania na tablicy znaków można użyć wbudowanych funkcji, takich jak, (strlen (), strlwr (), strupr (), strcat ()). Ponieważ standardowych operatorów nie można zastosować do tablicy znaków, nie mogą brać udziału w żadnym wyrażeniu.

Można również utworzyć wskaźnik postaci do tablicy znaków.

Rozumiem to na przykładzie.

 char s1 [] = "Hello"; char s2 [] = "Sir"; s1 = s1 + s2; // operatory błędów nie mogą być zastosowane s2 = s1; // error Wskaźnik znaku char * s = "Rano"; char * p; p = s; // wykonuje 

W powyższym przykładzie zadeklarowaliśmy dwie tablice znaków s1, s2 i dwa wskaźniki znakowe s i p. Wprowadzono tablicę znaków s1 i s2, widać, że ani operator dodawania (+), ani operator przypisania nie działają na tablicy znaków. Ale wskaźnik postaci można przypisać do innego wskaźnika.

Pamiętaj, że po zainicjowaniu tablicy znaków nie można jej ponownie zainicjować na inny zestaw znaków. Dostęp do tablicy znaków lub łańcucha zakończonego znakiem NUL jest szybki w porównaniu do łańcucha znaków w C ++.

Definicja ciągu

Ciąg nie jest wbudowanym typem danych C ++. Jest to obiekt klasy typu "string". Podobnie jak w C ++ tworzenie klasy jest jak tworzenie "typu". "Łańcuch" klasy jest częścią biblioteki C ++. Przechowuje zestaw znaków lub tablicę znaków jako całość. Istnieją trzy powody opracowania standardowej klasy ciągów.

  • Pierwszym z nich jest "konsystencja", tablice znaków nie są typami danych we własnym zakresie.
  • Drugi to "wygoda", nie można używać standardowych operatorów w tablicy znaków.
  • Trzeci to "bezpieczeństwo", granice tablic są łatwo przekraczane.

Rozumiemy ciągi na przykładzie.

 ciąg s1; s1 = "Hello"; ciąg s2 ("Dzień dobry"); string s3 = "Hennery"; ciąg s4; 

W powyższej deklaracji deklarowane są cztery zmienne łańcuchowe lub obiekty (s1, s2, s3, s4). W powyższej deklaracji pokazałem trzy sposoby inicjowania ciągu znaków. Łańcuch s1 jest zadeklarowany, a następnie oddzielnie inicjowany. Ciąg s2 jest inicjowany przez konstruktor klasy "String". Ciąg s3 jest inicjowany w momencie deklaracji, jak robi to zwykły typ danych. Możemy zastosować operatora standardowego do zmiennych łańcuchowych.

 s4 = s1; // przypisanie jednego obiektu tekstowego do innego s4 = s1 + s2; // dodanie dwóch łańcuchów i zapisanie wyniku w trzecim łańcuchu, jeśli (s3> s2) // porównywanie dwóch ciągów znaków s5 (s1); tworzenie nowego obiektu typu string za pomocą istniejącego obiektu typu string 

W powyższym kodzie różne operatory są stosowane na łańcuchu i wykonywane są różne operacje. Pierwsza instrukcja kopiuje jeden obiekt typu string do innego obiektu typu string. W drugiej instrukcji dwa ciągi są łączone i przechowywane w trzecim łańcuchu. W trzecim zestawieniu porównywane są dwa ciągi. W czwartej instrukcji nowy obiekt string jest tworzony przy użyciu już istniejącego obiektu typu string.

Dostęp do łańcucha jest powolny w porównaniu z tablicą znaków lub łańcuchem zakończonym znakiem NUL.

Kluczowe różnice między tablicą znaków a ciągiem znaków

  1. Tablica znaków jest zbiorem zmiennych o typie danych znakowych. String jest klasą, która jest instancjonowana do deklarowania łańcuchów.
  2. Używając wartości indeksu, możesz uzyskać dostęp do znaku z tablicy znaków. Z drugiej strony, jeśli chcesz uzyskać dostęp do określonego znaku w łańcuchu, możesz uzyskać do niego dostęp za pomocą funkcji nazwa_symbolu.charAt (indeks).
  3. Ponieważ tablica nie jest typem danych, podobnie postać nie jest typem danych. Z drugiej strony, String będący aktem klasy jako typ odniesienia, stąd można powiedzieć, że String jest typem danych.
  4. Nie można zastosować żadnego operatora w tablicy znaków, podczas gdy można zastosować operatorów w łańcuchu.
  5. Bycie tablicą znaków ma stałą długość, a jej granice można łatwo pokonać. Gdzie String nie ma żadnych granic.
  6. Elementy tablicy są przechowywane w sąsiadującej lokalizacji pamięci, dzięki czemu można uzyskać do nich dostęp szybciej niż zmienna łańcuchowa.

Wniosek:

Nieumiejętność działania na tablicy znaków spowodowała rozwój standardowej klasy ciągów.

Top