logo

Stringi w C++

Ciągi C++ to sekwencje znaków przechowywane w tablicy char. Ciągi służą do przechowywania słów i tekstu. Służą również do przechowywania danych, takich jak liczby i inne rodzaje informacji. Ciągi w C++ można zdefiniować za pomocą metody klasa std::string albo Tablice znaków w stylu C.

Stringi w C++

1. Struny w stylu C

Ciągi te są przechowywane jako zwykła, stara tablica znaków zakończona znakiem a znak zerowy „ ” . Są to typy ciągów, które C++ odziedziczył po języku C.



Składnia:

char str[] = 'techcodeview.com';>

Przykład:

C++




// C++ Program to demonstrate strings> #include> using> namespace> std;> int> main()> {> >char> s[] =>'techcodeview.com'>;> >cout << s << endl;> >return> 0;> }>

>

>

Wyjście

techcodeview.com>

2. Klasa std::string

Są to nowe typy ciągów, które zostały wprowadzone w C++ jako klasa std::string zdefiniowana w pliku nagłówkowym. Zapewnia to wiele korzyści w porównaniu z konwencjonalnymi ciągami w stylu C, takimi jak dynamiczny rozmiar, funkcje składowe itp.

Składnia:

std::string str('techcodeview.com');>

Przykład:

C++




// C++ program to create std::string objects> #include> using> namespace> std;> int> main()> {> >string str(>'techcodeview.com'>);> >cout << str;> >return> 0;> }>

>

>

Wyjście

techcodeview.com>

Jeszcze jeden sposób na utworzenie ciągów znaków zawierających ten sam znak, który będzie się powtarzał.

Składnia:

std::string str(number,character);>

Przykład:

C++




#include> using> namespace> std;> int> main()> {> >string str(5,>'g'>);> >cout << str;> >return> 0;> }>

>

>

Wyjście:

ggggg>

Sposoby definiowania ciągu w C++

W C++ ciągi znaków można definiować na kilka sposobów. Dostęp do ciągów można uzyskać z biblioteki standardowej za pomocą klasy string. Tablice znaków można również wykorzystać do zdefiniowania ciągów znaków. String zapewnia bogaty zestaw funkcji, takich jak wyszukiwanie i manipulowanie, które są powszechnie używanymi metodami. Pomimo tego, że jest mniej zaawansowana niż klasa string, metoda ta jest nadal szeroko stosowana, ponieważ jest wydajniejsza i łatwiejsza w użyciu. Sposoby definiowania ciągu w C++ to:

  • Używanie słowa kluczowego String
  • Używanie ciągów w stylu C

1. Używanie słowa kluczowego w postaci ciągu

Wygodniej jest zdefiniować ciąg za pomocą słowa kluczowego string zamiast słowa kluczowego array, ponieważ jest łatwy do napisania i zrozumienia.

Składnia:

string s = 'techcodeview.com'; string s('techcodeview.com');>

Przykład:

C++




// C++ Program to demonstrate use of string keyword> #include> using> namespace> std;> int> main()> {> >string s =>'techcodeview.com'>;> >string str(>'techcodeview.com'>);> >cout <<>'s = '> << s << endl;> >cout <<>'str = '> << str << endl;> >return> 0;> }>

>

>

Wyjście

s = techcodeview.com str = techcodeview.com>

2. Używanie ciągów w stylu C

Używanie funkcji bibliotek ciągów w stylu C, takich jak strcpy(), strcmp() i strcat() do definiowania ciągów. Ta metoda jest bardziej złożona i nie tak powszechnie stosowana jak pozostałe dwie, ale może być przydatna w przypadku starszego kodu lub gdy wymagana jest wydajność.

char s[] = {'g', 'f', 'g', ' '}; char s[4] = {'g', 'f', 'g', ' '}; char s[4] = 'gfg'; char s[] = 'gfg';>

Przykład:

C++




// C++ Program to demonstrate C-style string declaration> #include> using> namespace> std;> int> main()> {> >char> s1[] = {>'g'>,>'f'>,>'g'>,>' '> };> >char> s2[4] = {>'g'>,>'f'>,>'g'>,>' '> };> >char> s3[4] =>'gfg'>;> >char> s4[] =>'gfg'>;> >cout <<>'s1 = '> << s1 << endl;> >cout <<>'s2 = '> << s2 << endl;> >cout <<>'s3 = '> << s3 << endl;> >cout <<>'s4 = '> << s4 << endl;> >return> 0;> }>

>

>

Wyjście

s1 = gfg s2 = gfg s3 = gfg s4 = gfg>

Inny przykład ciągu w stylu C:

C++




#include> using> namespace> std;> int> main()> {> >string S =>'Geeeks for Geeks'>;> >cout <<>'Your string is= '>;> >cout << S << endl;> >return> 0;> }>

>

>

Wyjście

Your string is= Geeeks for Geeks>

Jak pobierać dane wejściowe w języku C++

Wprowadzanie ciągu oznacza przyjęcie ciągu znaków od użytkownika. W C++. Mamy różne typy pobierania danych wejściowych od użytkownika, które zależą od ciągu znaków. Najczęstszym sposobem jest pobieranie danych wejściowych za pomocą jedzenie słowo kluczowe z operatorem ekstrakcji (>>) w C++. Metody przyjmowania ciągu znaków jako danych wejściowych to:

  • jedzenie
  • getline
  • strumień ciągów

1. Korzystanie z Cin

Najprostszym sposobem wprowadzenia ciągu znaków jest użycie metody jedzenie polecenie wraz z operatorem wyodrębniania strumienia (>>).

Składnia:

cin>>s;>

Przykład:

C++




drzewo wyszukiwania binarnego]
// C++ Program to demonstrate string input using cin> #include> using> namespace> std;> int> main() {> >string s;> > >cout<<>'Enter String'>< cin>>s; cout<<'String is: '< return 0; }>

>

>

Wyjście

Enter String String is:>

Wyjście:

Enter String techcodeview.com String is: techcodeview.com>

2. Korzystanie z getline

The funkcja getline() w C++ służy do odczytania ciągu ze strumienia wejściowego. Jest zadeklarowana w pliku nagłówkowym.

Składnia:

getline(cin,s);>

Przykład:

C++




// C++ Program to demonstrate use of getline function> #include> using> namespace> std;> int> main()> {> >string s;> >cout <<>'Enter String'> << endl;> >getline(cin, s);> >cout <<>'String is: '> << s << endl;> >return> 0;> }>

>

>

rom
Wyjście

Enter String String is:>

Wyjście:

Enter String techcodeview.com String is: techcodeview.com>

3. Korzystanie ze strumienia stringów

The klasa stringstream w C++ służy do jednoczesnego pobierania wielu ciągów znaków jako danych wejściowych.

Składnia:

stringstream stringstream_object(string_name);>

Przykład:

C++




// C++ Program to demonstrate use of stringstream object> #include> #include> #include> using> namespace> std;> int> main()> {> >string s =>' techcodeview.com to the Moon '>;> >stringstream obj(s);> >// string to store words individually> >string temp;> >//>> operator odczyta z obiektu stringstream> >while> (obj>> temp) {> >cout << temp << endl;> >}> >return> 0;> }>

>

>

Wyjście

techcodeview.com to the Moon>

Jak przekazywać ciągi do funkcji?

W ten sam sposób, w jaki przekazujemy tablicę do funkcji, ciągi znaków w C++ można przekazywać do funkcji jako tablice znakowe. Oto przykładowy program:

Przykład:

C++




// C++ Program to print string using function> #include> using> namespace> std;> void> print_string(string s)> {> >cout <<>'Passed String is: '> << s << endl;> >return>;> }> int> main()> {> >string s =>'techcodeview.com'>;> >print_string(s);> >return> 0;> }>

>

>

Wyjście

Passed String is: techcodeview.com>

Wskaźniki i ciągi znaków

Wskaźniki w C++ są symboliczną reprezentacją adresów. Umożliwiają programom symulację call-by-reference, a także tworzenie i manipulowanie dynamicznymi strukturami danych. Za pomocą wskaźników możemy uzyskać pierwszy znak ciągu, który jest adresem początkowym ciągu. Jak pokazano poniżej, dostęp do danego ciągu można uzyskać i wydrukować za pomocą wskaźników.

Przykład:

C++




// C++ Program to print string using pointers> #include> using> namespace> std;> int> main()> {> >string s =>'Geeksforgeeks'>;> >// pointer variable declared to store the starting> >// address of the string> >char>* p = &s[0];> >// this loop will execute and print the character till> >// the character value is null this loop will execute and> >// print the characters> >while> (*p !=>' '>) {> >cout << *p;> >p++;> >}> >cout << endl;> >return> 0;> }>

>

>

Wyjście

Geeksforgeeks>

Różnica między tablicą String i Character w C++

Główna różnica między ciągiem znaków a tablicą znaków polega na tym, że ciągi znaków są niezmienne, podczas gdy tablice znaków nie.

Strunowy

Tablica znaków

Ciągi definiują obiekty, które można reprezentować jako strumienie ciągów. Znak null kończy tablicę znaków.
W ciągach nie następuje rozpad tablicy, ponieważ ciągi są reprezentowane jako obiekty.

Zagrożenie

rozpad tablicy

występuje w przypadku tablicy znaków

Klasa string udostępnia wiele funkcji umożliwiających manipulowanie ciągami. Tablice znaków nie oferują wbudowanych funkcji do manipulowania ciągami znaków.
Pamięć przydzielana jest dynamicznie. Rozmiar tablicy znaków musi być przydzielany statycznie.

Dowiedz się więcej o różnica między ciągami znaków i tablicami znaków w C++

Funkcje łańcuchowe C++

C++ udostępnia pewne wbudowane funkcje służące do manipulowania ciągami znaków, takie jak funkcje strcpy() i strcat() służące do kopiowania i łączenia ciągów. Niektórzy z nich są:

Funkcjonować

Opis

długość() Ta funkcja zwraca długość ciągu.
zamieniać() Ta funkcja służy do zamiany wartości 2 ciągów znaków.
rozmiar() Służy do znajdowania rozmiaru łańcucha
Zmień rozmiar() Funkcja ta służy do zmiany długości ciągu znaków do podanej liczby znaków.
znajdować() Służy do wyszukiwania ciągu znaków przekazywanego w parametrach
push_back() Ta funkcja służy do umieszczania przekazanego znaku na końcu łańcucha
pop_back() Ta funkcja służy do usuwania ostatniego znaku z ciągu
jasne() Ta funkcja służy do usuwania wszystkich elementów ciągu.
strncmp() Ta funkcja porównuje co najwyżej pierwszą liczbę bajtów obu przekazanych ciągów.
strncpy() Ta funkcja jest podobna do funkcji strcpy(), z tą różnicą, że kopiowanych jest maksymalnie n bajtów src
strchr() Ta funkcja lokalizuje ostatnie wystąpienie znaku w ciągu.
pęknięty() Ta funkcja dołącza kopię ciągu źródłowego na końcu ciągu docelowego
znajdować() Ta funkcja służy do wyszukiwania określonego podciągu w ciągu znaków i zwraca położenie pierwszego znaku podciągu.
zastępować() Funkcja ta służy do zastąpienia każdego elementu zakresu [pierwszy, ostatni), który jest równy starej wartości, nową wartością.
substr() Funkcja ta służy do utworzenia podciągu z danego ciągu.
porównywać() Ta funkcja służy do porównania dwóch ciągów znaków i zwraca wynik w postaci liczby całkowitej.
usuwać() Ta funkcja służy do usunięcia określonej części ciągu znaków.

Funkcje iteratora ciągów C++

W C++ wbudowane funkcje iteratora ciągów zapewniają programiście łatwy sposób modyfikowania i przeglądania elementów ciągu. Te funkcje to:

Funkcje Opis
zaczynać() Ta funkcja zwraca iterator wskazujący początek ciągu.
koniec() Ta funkcja zwraca iterator wskazujący koniec ciągu.
rznajdź() Ta funkcja służy do znalezienia ostatniego wystąpienia ciągu.
rzacznij() Ta funkcja zwraca iterator odwrotny wskazujący na koniec ciągu.
renderowanie() Ta funkcja zwraca iterator odwrotny wskazujący początek ciągu.
cbegin() Ta funkcja zwraca const_iterator wskazujący początek ciągu.
kilka() Ta funkcja zwraca const_iterator wskazujący koniec ciągu.
crbegin() Ta funkcja zwraca const_reverse_iterator wskazujący koniec ciągu.
wiara() Ta funkcja zwraca const_reverse_iterator wskazujący początek ciągu.

Przykład:

C++




// C++ Program to demonstrate string iterator functions> #include> using> namespace> std;> int> main()> {> >// declaring an iterator> >string::iterator itr;> >// declaring a reverse iterator> >string::reverse_iterator rit;> >string s =>'techcodeview.com'>;> >itr = s.begin();> > >cout <<>'Pointing to the start of the string: '> << *itr<< endl;> >itr = s.end() - 1;> >cout <<>'Pointing to the end of the string: '> << *itr << endl;> >rit = s.rbegin();> >cout <<>'Pointing to the last character of the string: '> << *rit << endl;> >rit = s.rend() - 1;> >cout <<>'Pointing to the first character of the string: '> << *rit << endl;> >return> 0;> }>

>

>

Wyjście

Pointing to the start of the string: G Pointing to the end of the string: s Pointing to the last character of the string: s Pointing to the first character of the string: G>

Funkcje pojemności ciągów

W języku C++ funkcje dotyczące pojemności łańcucha służą do zarządzania rozmiarem i pojemnością łańcucha. Podstawowe funkcje pojemności obejmują:

Funkcjonować Opis
długość() Ta funkcja służy do zwracania rozmiaru łańcucha
pojemność() Ta funkcja zwraca pojemność przydzieloną łańcuchowi przez kompilator
Zmień rozmiar() Ta funkcja pozwala nam zwiększyć lub zmniejszyć rozmiar łańcucha
zmniejszyć_do_dopasowania() Funkcja ta zmniejsza pojemność i zrównuje ją z wartością minimalną.

Przykład:

C++




#include> using> namespace> std;> int> main()> {> >string s =>'techcodeview.com'>;> > >// length function is used to print the length of the string> >cout <<>'The length of the string is '> << s.length() << endl;> > >// capacity function is used to print the capacity of the string> >cout <<>'The capacity of string is '> << s.capacity()<< endl;> > >// the string.resize() function is used to resize the string to 10 characters> >s.resize(10);> > >cout <<>'The string after using resize function is '> << s << endl;> > >s.resize(20);> > >cout <<>'The capacity of string before using shrink_to_fit function is '><< s.capacity() << endl;> > >// shrink to fit function is used to reduce the capacity of the container> >s.shrink_to_fit();> >cout <<>'The capacity of string after using shrink_to_fit function is '><< s.capacity() << endl;> >return> 0;> }>

>

>

Wyjście

The length of the string is 13 The capacity of string is 15 The string after using resize function is GeeksforGe The capacity of string before using shrink_to_fit function is 30 The capacity of string...>

Podsumowując, w tym artykule wyjaśniono, w jaki sposób można definiować ciągi znaków w C++ przy użyciu tablic znaków i klas ciągów. Klasa string zapewnia bardziej zaawansowane funkcje, natomiast tablica znaków zapewnia podstawowe funkcje, ale jest wydajna i łatwa w użyciu. W tym artykule omówiliśmy także różne metody zbierania informacji od użytkownika.

Aby dowiedzieć się więcej o klasie std::string, zapoznaj się z artykułem – klasa std::string w C++