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.
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++
// 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;> }> |
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++