C++ Funkce pro tvorbu řetězců: strcpy(), strcat(), strlen(), strcmp()
⚡ Chytré shrnutí
C++ Funkce pro práci s řetězci, jako například strcpy, strcat, strlen a strcmp, umožňují programům kopírovat, spojovat, měřit a porovnávat text. Tento zdroj vysvětluje, co je řetězec, jak deklarovat řetězce ve stylu C a std::string, jak přistupovat k jejich hodnotám a jak používat základní funkce pro práci s řetězci s příklady.

Co je to řetězec?
Řetězec je posloupnost znaků. A C++ String je objekt třídy std::string. Znaky jsou uloženy jako sekvence bajtů, s povoleným přístupem k jednomu znaku typu bajt.
C++ Řetězce alokují paměť dynamicky. V případě potřeby lze řetězci během běhu alokovat více paměti. Protože nedochází k předběžné alokaci paměti, nedochází k jejímu plýtvání. S řetězci můžeme provádět různé operace, včetně porovnávání, zřetězení, konverze atd.
Deklarace řetězců
C++ podporuje dva typy deklarací řetězců:
- Řetězec znaků ve stylu C
- Typ třídy řetězce
Řetězec znaků ve stylu C
Tento typ deklarace řetězce byl zaveden v C programovací jazyk. C++ nadále jej podporuje. Je to jednoduše jednorozměrné pole znaků ukončené nulovým znakem (\0). Řetězec ukončený nulou obsahuje znaky, které tvoří řetězec, následované null znakem.
Zvažte deklaraci řetězce uvedenou níže:
char name[5] = {'J', 'o', 'h', 'n', '\0'};
Výše uvedená deklarace vytvoří řetězec, který tvoří slovo John. Slovo má 4 znaky, ale řetězec má velikost 5. Další mezera umožňuje uložení znaku null.
Pomocí pravidla inicializace pole můžeme napsat výše uvedený příkaz takto:
char name[] = "John";
Všimněte si, že na konec řetězcové konstanty nemusíte umisťovat znak null. C++ kompilátor automaticky umístí '\0' na konec řetězce při inicializaci pole.
std::string
Standardní C++ Knihovna poskytuje třídu string, která podporuje různé operace s řetězci. Je zapsána jako std::string.
Abychom mohli tuto třídu použít, musíme ji nejprve zahrnout do našeho pracovního prostoru pomocí preprocesoru #include, jak je znázorněno níže:
#include <string>
Dále můžeme deklarovat náš řetězec pomocí klíčového slova string. Například:
string name = "John";
Výše uvedený příkaz vytvoří řetězec s názvem name, který bude obsahovat hodnotu John.
Přístup k hodnotám řetězce
In C++, k hodnotám řetězce můžeme přistupovat pomocí názvu řetězce. Například:
#include <iostream> using namespace std; int main() { char name[5] = { 'J', 'o', 'h', 'n', '\0' }; cout << "String value is: "; cout << name << endl; return 0; }
Výstup:
Zde je snímek obrazovky kódu:
Code Vysvětlení:
- Včetně souboru záhlaví iostream v našem kódu. Umožní nám to číst a zapisovat do konzole.
- Včetně jmenného prostoru std, aby bylo možné používat jeho třídy a funkce bez jeho volání.
- Volání funkce main(), do které má být přidána logika programu. Znak { označuje začátek těla funkce main().
- Deklaruje řetězec znaků a pojmenuje jej. Řetězec uloží hodnotu John. Do mezery navíc bude uložen znak null.
- Tisk nějakého textu na konzoli.
- Tisk hodnoty řetězce s názvem name na konzole.
- Funkce main() by měla vrátit hodnotu, pokud program běží správně.
- Konec těla funkce main().
Zde je další příklad použití C++ standardní třída strun:
#include <iostream> #include <string> using namespace std; int main() { string name = "Guru99"; cout << "The name is : " << name << endl; return 0; }
Výstup:
Zde je snímek obrazovky kódu:
Code Vysvětlení:
- Včetně souboru záhlaví iostream v našem kódu. Umožní nám to číst a zapisovat do konzole.
- Včetně standardní třídy řetězců v našem kódu.
- Včetně jmenného prostoru std, aby bylo možné používat jeho třídy a funkce bez jeho volání.
- Volání funkce main(), do které má být přidána logika programu. Znak { označuje začátek těla funkce main().
- Deklarace řetězce a jeho pojmenování name. Řetězec bude uchovávat hodnotu. Guru99.
- Tisk hodnoty názvu řetězce vedle nějakého textu na konzole.
- Funkce main() by měla vrátit hodnotu, pokud program běží správně.
- Konec těla funkce main().
Funkce řetězců v C++
Často budete chtít manipulovat s řetězci. C++ nabízí širokou škálu funkcí, které k tomu můžete použít. Tyto funkce jsou definovány v hlavičku, takže ji musíme zahrnout do našeho kódu, abychom mohli funkce používat. Pojďme si některé z nich probrat:
strcpy()
Toto je funkce kopírování řetězce. Zkopíruje jeden řetězec do jiného řetězce.
Syntaxe:
strcpy(string1, string2);
Dva parametry funkce, řetězec1 a řetězec2, jsou řetězce. Funkce zkopíruje řetězec řetězec2 do řetězce1.
strcat()
Toto je funkce řetězení řetězců. Zřetězuje řetězce.
Syntaxe:
strcat(string1, string2);
Dva parametry funkce, řetězec1 a řetězec2, představují řetězce, které mají být zřetězeny. Výše uvedená funkce zřetězí řetězec řetězec2 s koncem řetězce řetězec1.
strlen()
Toto je funkce délky řetězce. Vrátí délku řetězce, který mu byl předán jako argument.
Syntaxe:
strlen(string1);
Parametr řetězec1 je název řetězce, jehož délka má být určena. Výše uvedená funkce vrátí délku řetězce string1.
strcmp()
Toto je funkce porovnávání řetězců. Používá se pro porovnání řetězců.
Syntaxe:
strcmp(string1, string2);
Výše uvedená funkce vrátí 0, pokud jsou si řetězce string1 a string2 podobné, menší než 0, pokud string1 < string2, a větší než 0, pokud string1 > string2.
Příklad:
Následující příklad ukazuje, jak používat výše uvedené funkce řetězce:
#include <iostream> #include <cstring> using namespace std; int main() { char name1[10] = "Guru99"; char name2[10] = "John"; char name3[10]; int len; strcpy(name3, name1); cout << "strcpy( name3, name1) : " << name3 << endl; strcat(name1, name2); cout << "strcat( name1, name2): " << name1 << endl; len = strlen(name1); cout << "strlen(name1) : " << len << endl; return 0; }
Výstup:
Zde je snímek obrazovky kódu:
Code Vysvětlení:
- Včetně souboru záhlaví iostream v našem kódu. Umožní nám to číst a zapisovat do konzole.
- Včetně standardu hlavičku v našem kódu.
- Včetně jmenného prostoru std, aby bylo možné používat jeho třídy a funkce bez jeho volání.
- Volání funkce main(), do které má být přidána logika programu. Znak { označuje začátek těla funkce main().
- Deklarace řetězce o délce 10 znaků a jeho pojmenování name1. Řetězec bude uchovávat hodnotu Guru99.
- Deklarace řetězce o 10 znacích a pojmenování name2. Řetězec uloží hodnotu John.
- Deklarace řetězce o 10 znacích a pojmenování name3.
- Vyhlášení an celočíselná proměnná jménem len.
- Zkopírování řetězce name1 do řetězce name3.
- Výpis hodnoty řetězce name3 spolu s nějakým textem na konzoli. Mělo by se vypsat Guru99.
- Zřetězení řetězce název2 s koncem řetězce název1. Hodnota názvu1 je nyní Guru99Jan.
- Výpis hodnoty řetězce name1 spolu s nějakým textem na konzoli. Mělo by se vypsat Guru99Jan.
- Určení délky řetězce s názvem name1 a přiřazení hodnoty délky proměnné len.
- Výpis hodnoty proměnné len spolu s dalším textem na konzoli.
- Funkce main() by měla vrátit hodnotu, pokud program běží správně.
- Konec těla funkce main().




