C++ Funkcija niza znakova: strcpy(), strcat(), strlen(), strcmp()

โšก Pametni saลพetak

C++ Funkcije za rad s nizovima znakova kao ลกto su strcpy, strcat, strlen i strcmp omoguฤ‡uju programima kopiranje, spajanje, mjerenje i usporeฤ‘ivanje teksta. Ovaj resurs objaลกnjava ลกto je niz znakova, kako deklarirati nizove u C stilu i std::string, pristupiti njihovim vrijednostima i primijeniti osnovne funkcije za rad s nizovima znakova s โ€‹โ€‹primjerima.

  • ๐Ÿ”ค Osnovna definicija: Niz znakova je niz znakova; a C++ string je objekt klase std::string.
  • ๐Ÿงฑ Dvije deklaracije: C++ podrลพava nizove znakova u C stilu koji se zavrลกavaju s '\0' i sigurnijim tipom klase std::string.
  • ๐Ÿ“ฅ Pristup vrijednostima: Nizovi se ฤitaju i ispisuju po imenu, ลกto je demonstrirano i s nizovima znakova i s std::string.
  • ๐Ÿ› ๏ธ Funkcije nizova: strcpy kopira, strcat spaja, strlen mjeri duljinu, a strcmp usporeฤ‘uje dva niza znakova.
  • ???? Obavezno zaglavlje: C string funkcije se nalaze u cstring zaglavlju, koje mora biti ukljuฤeno prije upotrebe.

C++ Funkcije nizova

ล to je String?

String je niz znakova. A C++ String je objekt klase std::string. Znakovi se pohranjuju kao nizovi bajtova, s dopuลกtenim pristupom jednom znaku bajta.

C++ Nizovi dinamiฤki dodjeljuju memoriju. Tijekom izvoฤ‘enja niza moลพe se po potrebi dodijeliti viลกe memorije. Buduฤ‡i da nema prethodne dodjele memorije, nema rasipanja memorije. Moลพemo izvoditi razne operacije na nizovima, ukljuฤujuฤ‡i usporedbu, spajanje, pretvorbu itd.

Deklariranje nizova

C++ podrลพava dvije vrste deklaracija nizova:

  • Niz znakova u stilu C
  • Tip klase niza

Niz znakova u stilu C

Ova vrsta deklaracije niza znakova uvedena je u C programski jezik. C++ i dalje ga podrลพava. To je jednostavno jednodimenzionalni niz znakova koji zavrลกava null znakom (\0). Niz koji zavrลกava null znakom sadrลพi znakove koji ฤine niz, a nakon njih slijedi null.

Razmotrite donju deklaraciju niza:

char name[5] = {'J', 'o', 'h', 'n', '\0'};

Gornja deklaracija stvara niz znakova koji tvori rijeฤ John. Rijeฤ ima 4 znaka, ali niz znakova ima veliฤinu 5. Dodatni prostor omoguฤ‡uje drลพanje null znaka.

Koristeฤ‡i pravilo inicijalizacije polja, moลพemo napisati gornju izjavu na sljedeฤ‡i naฤin:

char name[] = "John";

Imajte na umu da ne morate staviti null znak na kraj string konstante. C++ kompajler ฤ‡e automatski postaviti '\0' na kraj niza prilikom inicijalizacije niza.

std::string

Norma C++ Knjiลพnica pruลพa klasu stringova koja podrลพava razne operacije s stringovima. Napisana je kao std::string.

Da bismo koristili ovu klasu, prvo je moramo ukljuฤiti u naลก radni prostor pomoฤ‡u #include predprocesora kao ลกto je prikazano u nastavku:

#include <string>

Zatim moลพemo deklarirati naลก niz koristeฤ‡i kljuฤnu rijeฤ string. Na primjer:

string name = "John";

Gornja naredba stvorit ฤ‡e niz imena name koji ฤ‡e sadrลพavati vrijednost John.

Pristup vrijednostima nizova

In C++, moลพemo pristupiti vrijednostima niza koristeฤ‡i naziv niza. Na primjer:

#include <iostream>
using namespace std;
int main() {
	char name[5] = { 'J', 'o', 'h', 'n', '\0' };
	cout << "String value is: ";
	cout << name << endl;
	return 0;
}

Izlaz:

Pristup vrijednostima nizova

Evo snimke zaslona koda:

Pristup vrijednostima nizova

Code Objaลกnjenje:

  1. Ukljuฤivanje iostream datoteke zaglavlja u naลก kod. Omoguฤ‡it ฤ‡e nam ฤitanje s konzole i pisanje na nju.
  2. Ukljuฤivanje std imenskog prostora kako bi se njegove klase i funkcije koristile bez pozivanja.
  3. Pozivanje funkcije main() unutar koje treba dodati logiku programa. { oznaฤava poฤetak tijela funkcije main().
  4. Deklaracija niza znakova i davanje imena name. Niz ฤ‡e pohraniti vrijednost John. Dodatni prostor ฤ‡e pohraniti nulti znak.
  5. Ispis nekog teksta na konzoli.
  6. Ispisivanje vrijednosti niza pod nazivom name na konzoli.
  7. Funkcija main() trebala bi vratiti vrijednost ako program dobro radi.
  8. Kraj tijela funkcije main().

Evo joลก jednog primjera koriลกtenja C++ standardna klasa niza:

#include <iostream>
#include <string>
using namespace std;
int main() {

	string name = "Guru99";

	cout << "The name is : " << name << endl;

	return 0;
}

Izlaz:

Pristup vrijednostima nizova

Evo snimke zaslona koda:

Pristup vrijednostima nizova

Code Objaลกnjenje:

  1. Ukljuฤivanje iostream datoteke zaglavlja u naลก kod. Omoguฤ‡it ฤ‡e nam ฤitanje s konzole i pisanje na nju.
  2. Ukljuฤivanje standardne klase nizova u naลก kod.
  3. Ukljuฤivanje std imenskog prostora kako bi se njegove klase i funkcije koristile bez pozivanja.
  4. Pozivanje funkcije main() unutar koje treba dodati logiku programa. { oznaฤava poฤetak tijela funkcije main().
  5. Deklarisanje niza znakova i davanje imena name. Niz znakova ฤ‡e pohraniti vrijednost. Guru99.
  6. Ispis vrijednosti naziva niza uz neki tekst na konzoli.
  7. Funkcija main() trebala bi vratiti vrijednost ako program dobro radi.
  8. Kraj tijela funkcije main().

Funkcije nizova u C++

ฤŒesto ฤ‡ete ลพeljeti manipulirati ลพicama. C++ pruลพa ลกirok raspon funkcija koje moลพete koristiti za to. Ove funkcije su definirane u zaglavlje, pa ga moramo ukljuฤiti u naลก kod kako bismo mogli koristiti funkcije. Razmotrimo neke:

strcpy()

Ovo je funkcija kopiranja niza. Kopira jedan niz u drugi niz.

Sintaksa:

strcpy(string1, string2);

Dva parametra funkcije, string1 i string2, su stringovi. Funkcija ฤ‡e kopirati string string2 u string1.

strcat()

Ovo je funkcija spajanja nizova. Spaja nizove.

Sintaksa:

strcat(string1, string2);

Dva parametra funkcije, string1 i string2, su stringovi koji se spajaju. Gornja funkcija ฤ‡e spojiti string string2 s krajem stringa string1.

strlen()

Ovo je funkcija duljine niza. Vraฤ‡a duljinu niza koji mu je proslijeฤ‘en kao argument.

Sintaksa:

strlen(string1);

Parametar string1 je naziv niza ฤiju duljinu treba odrediti. Gornja funkcija vratit ฤ‡e duljinu niza string1.

strcmp()

Ovo je funkcija usporedbe nizova. Koristi se za usporedbu nizova.

Sintaksa:

strcmp(string1, string2);

Gornja funkcija ฤ‡e vratiti 0 ako su nizovi string1 i string2 sliฤni, manji od 0 ako je string1 < string2 i veฤ‡i od 0 ako je string1 > string2.

Primjer:

Sljedeฤ‡i primjer pokazuje kako koristiti gornje funkcije niza:

#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;
}

Izlaz:

Funkcije nizova u C++

Evo snimke zaslona koda:

Funkcije nizova u C++

Code Objaลกnjenje:

  1. Ukljuฤivanje iostream datoteke zaglavlja u naลก kod. Omoguฤ‡it ฤ‡e nam ฤitanje s konzole i pisanje na nju.
  2. Ukljuฤujuฤ‡i i standard zaglavlje u naลกem kodu.
  3. Ukljuฤivanje std imenskog prostora kako bi se njegove klase i funkcije koristile bez pozivanja.
  4. Pozivanje funkcije main() unutar koje treba dodati logiku programa. { oznaฤava poฤetak tijela funkcije main().
  5. Deklarisanje niza od 10 znakova i davanje imena ime1. Niz ฤ‡e pohraniti vrijednost Guru99.
  6. Deklaracija niza od 10 znakova i davanje imena name2. Niz ฤ‡e pohraniti vrijednost John.
  7. Deklaracija niza od 10 znakova i davanje imena name3.
  8. Izjavljivanje cjelobrojna varijabla imenom len.
  9. Kopiranje niza name1 u string name3.
  10. Ispis vrijednosti niza name3 uz neki tekst u konzoli. Trebalo bi ispisati Guru99.
  11. Spajanje niza name2 s krajem niza name1. Vrijednost name1 sada je Guru99Ivan.
  12. Ispis vrijednosti niza name1 uz neki tekst u konzoli. Trebalo bi ispisati Guru99Ivan.
  13. Odreฤ‘ivanje duljine niza pod nazivom ime1 i dodjeljivanje vrijednosti duljine varijabli len.
  14. Ispis vrijednosti varijable len uz neki drugi tekst na konzoli.
  15. Funkcija main() trebala bi vratiti vrijednost ako program dobro radi.
  16. Kraj tijela funkcije main().

Pitanja i odgovori

Da. AI asistenti mogu refaktorirati polja znakova u std::string, aลพurirati povezane funkcije i objasniti sigurnosne prednosti. Programeri bi i dalje trebali pregledati promjene za rubne sluฤajeve, veliฤine meฤ‘uspremnika i namjeravano ponaลกanje.

Da. Alati umjetne inteligencije generiraju raฤ‘ene primjere, objaลกnjavaju kako se strcpy i strcat ponaลกaju te oznaฤavaju rizike prepunjenja meฤ‘uspremnika. To ubrzava razumijevanje, ali samostalno pokretanje koda ostaje najbolji naฤin za potvrdu ponaลกanja.

std::string dinamiฤki upravlja memorijom i pruลพa ugraฤ‘ene operacije poput spajanja i usporedbe. C-stilski nizovi su fiksni znakovni nizovi koji zavrลกavaju s '\0', zahtijevaju ruฤno rukovanje memorijom i skloniji su greลกkama.

Mogu uzrokovati prelijevanje meฤ‘uspremnika ako je odrediลกni niz premalen. Sigurnije alternative ukljuฤuju strncpy, strncat ili jednostavno koriลกtenje std::string operacija, koje automatski upravljaju memorijom i smanjuju te rizike.

Saลพmite ovu objavu uz: