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.

  • 🔤 Základní definice: Řetězec je posloupnost znaků; C++ String je objekt třídy std::string.
  • 🧱 Dvě prohlášení: C++ podporuje pole znaků ve stylu C ukončená znakem '\0' a bezpečnějším typem třídy std::string.
  • 📥 Přístup k hodnotám: Řetězce se čtou a tisknou podle názvu, což je demonstrováno jak pomocí polí char, tak i pomocí std::string.
  • 🛠️ Funkce pro práci s řetězci: strcpy kopíruje, strcat zřetězuje, strlen měří délku a strcmp porovnává dva řetězce.
  • ???? Povinná hlavička: Funkce pro jazyk C se nacházejí v hlavičce cstring, kterou je nutné před použitím zahrnout.

C++ Řetězcové funkce

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:

Přístup k hodnotám řetězce

Zde je snímek obrazovky kódu:

Přístup k hodnotám řetězce

Code Vysvětlení:

  1. Včetně souboru záhlaví iostream v našem kódu. Umožní nám to číst a zapisovat do konzole.
  2. Včetně jmenného prostoru std, aby bylo možné používat jeho třídy a funkce bez jeho volání.
  3. Volání funkce main(), do které má být přidána logika programu. Znak { označuje začátek těla funkce main().
  4. Deklaruje řetězec znaků a pojmenuje jej. Řetězec uloží hodnotu John. Do mezery navíc bude uložen znak null.
  5. Tisk nějakého textu na konzoli.
  6. Tisk hodnoty řetězce s názvem name na konzole.
  7. Funkce main() by měla vrátit hodnotu, pokud program běží správně.
  8. 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:

Přístup k hodnotám řetězce

Zde je snímek obrazovky kódu:

Přístup k hodnotám řetězce

Code Vysvětlení:

  1. Včetně souboru záhlaví iostream v našem kódu. Umožní nám to číst a zapisovat do konzole.
  2. Včetně standardní třídy řetězců v našem kódu.
  3. Včetně jmenného prostoru std, aby bylo možné používat jeho třídy a funkce bez jeho volání.
  4. Volání funkce main(), do které má být přidána logika programu. Znak { označuje začátek těla funkce main().
  5. Deklarace řetězce a jeho pojmenování name. Řetězec bude uchovávat hodnotu. Guru99.
  6. Tisk hodnoty názvu řetězce vedle nějakého textu na konzole.
  7. Funkce main() by měla vrátit hodnotu, pokud program běží správně.
  8. 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:

Funkce řetězců v C++

Zde je snímek obrazovky kódu:

Funkce řetězců v C++

Code Vysvětlení:

  1. Včetně souboru záhlaví iostream v našem kódu. Umožní nám to číst a zapisovat do konzole.
  2. Včetně standardu hlavičku v našem kódu.
  3. Včetně jmenného prostoru std, aby bylo možné používat jeho třídy a funkce bez jeho volání.
  4. Volání funkce main(), do které má být přidána logika programu. Znak { označuje začátek těla funkce main().
  5. Deklarace řetězce o délce 10 znaků a jeho pojmenování name1. Řetězec bude uchovávat hodnotu Guru99.
  6. Deklarace řetězce o 10 znacích a pojmenování name2. Řetězec uloží hodnotu John.
  7. Deklarace řetězce o 10 znacích a pojmenování name3.
  8. Vyhlášení an celočíselná proměnná jménem len.
  9. Zkopírování řetězce name1 do řetězce name3.
  10. Výpis hodnoty řetězce name3 spolu s nějakým textem na konzoli. Mělo by se vypsat Guru99.
  11. Zřetězení řetězce název2 s koncem řetězce název1. Hodnota názvu1 je nyní Guru99Jan.
  12. Výpis hodnoty řetězce name1 spolu s nějakým textem na konzoli. Mělo by se vypsat Guru99Jan.
  13. Určení délky řetězce s názvem name1 a přiřazení hodnoty délky proměnné len.
  14. Výpis hodnoty proměnné len spolu s dalším textem na konzoli.
  15. Funkce main() by měla vrátit hodnotu, pokud program běží správně.
  16. Konec těla funkce main().

Nejčastější dotazy

Ano. Asistenti umělé inteligence mohou refaktorovat pole char do std::string, aktualizovat související funkce a vysvětlovat bezpečnostní výhody. Vývojáři by si i tak měli projít změny z hlediska okrajových případů, velikostí vyrovnávacích pamětí a zamýšleného chování.

Ano. Nástroje umělé inteligence generují zpracované příklady, vysvětlují, jak se chovají příkazy strcpy a strcat, a signalizují rizika přetečení vyrovnávací paměti. To urychluje pochopení, ale nejlepším způsobem, jak ověřit chování, zůstává spuštění kódu sami.

std::string dynamicky spravuje paměť a poskytuje vestavěné operace, jako je zřetězení a porovnávání. Řetězce ve stylu C jsou pole s pevnými znaky ukončená znakem '\0', která vyžadují ruční zpracování paměti a jsou náchylnější k chybám.

Pokud je cílové pole příliš malé, mohou způsobit přetečení vyrovnávací paměti. Bezpečnější alternativy zahrnují strncpy, strncat nebo jednoduše použití operací std::string, které automaticky spravují paměť a snižují tato rizika.

Shrňte tento příspěvek takto: