std::string a tablice znaków w stylu C
Proszę porównać nowoczesny std::string ze starszymi, zakończonymi bajtem null tablicami char i zdecydować, kiedy używać każdego z nich.
std::string a tablice znaków w stylu C to bezpłatna lekcja C++ Academy na CoddyKit. To lekcja 1 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej C++ Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs C++ Academy zawiera 4 lekcji w sumie.
Dwa sposoby przechowywania tekstu
C++ odziedziczył napisy w stylu C — zakończone bajtem null tablice char — i dodał std::string z biblioteki standardowej. Niemal zawsze należy używać std::string.
Napisy w stylu C
Napisy w stylu C to sekwencje elementów char zakończone bajtem null '\0'. Funkcje takie jak strlen przechodzą przez tablicę aż do znalezienia wartości null.
const char* greeting = "Hello";
// Memory: H, e, l, l, o, \0 (6 bytes)
#include <cstring>
std::cout << std::strlen(greeting); // 5std::string
std::string samodzielnie zarządza pamięcią i zwiększa swój rozmiar w razie potrzeby. Należy go konstruować tak jak każdy inny typ.
#include <string>
std::string name = "Ada";
name += " Lovelace";
std::cout << name; // Ada LovelaceRozmiar i długość
std::string::size() i length() są synonimami i zwracają liczbę znaków (bez terminatora null).
std::string s = "hello";
std::cout << s.size(); // 5
std::cout << s.length(); // 5Dostęp indeksowany
Znaki można odczytywać i zapisywać za pomocą [] lub at(). W przeciwieństwie do [], at() zgłasza wyjątek, jeśli indeks znajduje się poza zakresem.
std::string s = "cat";
char first = s[0]; // 'c'
char last = s.at(2); // 't'
// s.at(10) throws std::out_of_rangePuste napisy
Zamiast size() == 0 należy używać empty(). Taki zapis jest czytelniejszy i równie szybki.
Kiedy używać const char*
Napisu w stylu C należy używać, gdy:
- Współpracujesz z bibliotekami C lub interfejsami API systemu operacyjnego
- Pracujesz z niezmiennymi literałami napisowymi
- Tworzysz oprogramowanie dla systemów wbudowanych, w których biblioteka standardowa jest niedostępna
Konwertowanie między nimi
Napisy C można uzyskać z obiektu std::string za pomocą .c_str(). Obiekt std::string można bezpośrednio utworzyć z wartości typu const char*.
std::string s = "Hello";
const char* c = s.c_str();
const char* literal = "world";
std::string s2(literal);Literały napisowe mają typ const char[]
Literał napisowy taki jak "hi" ma typ const char[3] (z uwzględnieniem terminatora null). Znajduje się w pamięci tylko do odczytu.
Literały napisowe raw
Użyj prefiksu R"(...)", aby pominąć przetwarzanie znaków ucieczki. Jest to przydatne w przypadku wzorców wyrażeń regularnych i ścieżek plików.
std::string regex = R"(\d+\.\d{2})";
std::string path = R"(C:\Users\Ada)";Iterowanie po std::string
Napisy są kontenerami. Można iterować po nich za pomocą pętli for opartej na zakresie, indeksów lub iteratorów.
std::string s = "abc";
for (char c : s) std::cout << c << " "; // a b cSzybkie sprawdzenie
Która metoda obiektu std::string zgłasza wyjątek, gdy indeks znajduje się poza zakresem?
Podsumowanie
Do zarządzania tekstem należy preferować std::string. const char* należy używać dla literałów i podczas współpracy z interfejsami API języka C. Między tymi typami można konwertować za pomocą .c_str() i bezpośredniej konstrukcji.
Ucz się C++ dzięki korepetycjom AI — za darmo
Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.
- Kursy
- 51
- Lekcje
- 203
Często zadawane pytania
Czy lekcja „std::string a tablice znaków w stylu C” jest bezpłatna?
Tak — pełny tekst „std::string a tablice znaków w stylu C” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu C++ Academy, przejdź na CoddyKit PRO. Kurs C++ Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „std::string a tablice znaków w stylu C”?
Proszę porównać nowoczesny std::string ze starszymi, zakończonymi bajtem null tablicami char i zdecydować, kiedy używać każdego z nich. Ćwiczysz C++ Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć C++ Academy?
Nie wymagamy żadnego doświadczenia. C++ Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 1 z 4.
Ile czasu zajmuje lekcja „std::string a tablice znaków w stylu C”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji C++ Academy?
Tak. Każda lekcja C++ Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- std::string a tablice znaków w stylu C
- Operacje na ciągach: concat, substr, find, replace
- Strumień napisów stringstream do parsowania
- Konwersja ciągów: to_string i stoi