C++ Academy · Lekcja

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.

Lekcja 1 z 413 kroki

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);  // 5

std::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 Lovelace

Rozmiar 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(); // 5

Dostę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_range

Puste 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 c

Szybkie 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.

Bezpłatny start

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

  1. std::string a tablice znaków w stylu C
  2. Operacje na ciągach: concat, substr, find, replace
  3. Strumień napisów stringstream do parsowania
  4. Konwersja ciągów: to_string i stoi
← Powrót do C++ Academy