Funkcia podreťazec sa používa na manipuláciu s operáciami s reťazcami, napr prasknutý() , pripojiť () , atď . Vygeneruje nový reťazec s inicializovanou hodnotou na kópiu podreťazca tohto objektu. V C++ je hlavičkový súbor, ktorý sa vyžaduje pre funkcie std::substr(), string .
Funkcia podreťazca má dve hodnoty poz a len ako argument a vráti novovytvorený objekt typu reťazec s inicializovanou hodnotou na kópiu podreťazca tohto objektu. Kopírovanie reťazca začína od poz a je hotovo do pos+len znamená [poz, poz+len).
Syntax:
string substr (size_t pos, size_t len) const;>
Parametre:
- poz.: Pozícia prvého znaku, ktorý sa má skopírovať.
- len: Dĺžka podreťazca.
- size_t: Je to integrálny typ bez znamienka.
Návratová hodnota: Vracia objekt typu reťazec.
Príklad:
C++ // C++ program to demonstrate functioning of substr() #include #include using namespace std; int main() { // Take any string string s1 = 'Geeks'; // Copy two characters of s1 (starting // from position 3) string r = s1.substr(3, 2); // prints the result cout << 'String is: ' << r; return 0; }> Výkon
String is: ks>
- Časová zložitosť: O(N)
- Pomocný priestor: O(N)
Ďalšie príklady:
string: ' h e l l o w o r l d ' index: 0 1 2 3 4 5 6 7 8 9 10>
ak napíšeme: -
- s.substr(s.begin(),3) => chyba kompilácie (pretože nemožno konvertovať iterátor na dátový typ int)
- s.substr(2,3) => llo (tri písmená z 2. indexu)
- s.substr(*s.begin()-s[0],3) => hel (*s.begin() je ‚h‘, potom ‚h‘-s[0]=> ‚h‘-‘h‘=0 znamená substr(0,3) —– tri písmená od nultého indexu
- s.substr(5,1) => „ “ (vytlačí prázdne miesto, to znamená na 5. indexe)
- s.substr(2,0) => (nie je výstup) (vyberie nula písmen z druhého indexu)
Dôležité body na zapamätanie
- Index prvého znaku je 0 (nie 1).
- Ak poz sa rovná dĺžke reťazca, funkcia vráti prázdny reťazec.
- Ak poz je väčšia ako dĺžka reťazca, vyhodí mimo_rozsah. Ak sa tak stane, v reťazci nenastanú žiadne zmeny.
- Ak je požadovaný podreťazec len je väčšia ako veľkosť reťazca, potom vrátený podreťazec je [pos, size()) .
- Ak len nie je odovzdaný ako parameter, potom je vrátený podreťazec [pos, veľkosť()).
Aplikácie podreťazca
- Získajte podreťazec za znakom
- Získajte podreťazec pred znak
- Vytlačte všetky podreťazce daného reťazca
- Súčet všetkých podreťazcov reťazca reprezentujúceho číslo
- Vytlačte maximálnu hodnotu všetkých podreťazcov reťazca reprezentujúceho číslo
- Vytlačte minimálnu hodnotu všetkých podreťazcov reťazca reprezentujúceho číslo
Získajte podreťazec za znakom
V tomto je daný reťazec a znak a vy musíte vytlačiť podreťazec, za ktorým nasleduje daný znak.
Extrahujte všetko po : v reťazci pes mačka .
Príklad:
C++ // C++ program to demonstrate functioning of substr() #include #include using namespace std; int main() { // Take any string string s = 'dog:cat'; // Find position of ':' using find() int pos = s.find(':'); // Copy substring after pos string sub = s.substr(pos + 1); // prints the result cout << 'String is: ' << sub; return 0; }> Výkon
String is: cat>
Časová zložitosť: O(N)
Pomocný priestor: O(N)
Ako dostať podreťazec pred znak?
V tomto je daný reťazec a znak a vy musíte vytlačiť podreťazec, za ktorým nasleduje daný znak.
sql poradie podľa dátumu
Príklad:
C++ // C++ program to demonstrate functioning of substr() #include #include using namespace std; int main() { // Take any string string s = 'dog:cat'; // Find position of ':' using find() int pos = s.find(':'); // Copy substring before pos // Extract everything before the ':' in the string // 'dog:cat'. string sub = s.substr(0, pos); // prints the result cout << 'String is: ' << sub; return 0; }> Výkon
String is: dog>
Časová zložitosť: O(N)
Pomocný priestor: O(N)
Ako vytlačiť všetky podreťazce daného reťazca?
Zadaný reťazec ako vstup. Musíme napísať program, ktorý vypíše všetky neprázdne podreťazce daného reťazca.
Príklad:
C++ // C++ program to demonstrate all possible // substrings of a given string #include using namespace std; // Function to print all sub strings void subString(string s, int n) { // Pick starting point in outer loop // and lengths of different strings for // a given starting point for (int i = 0; i < n; i++) for (int len = 1; len <= n - i; len++) cout << s.substr(i, len) << endl; } // Driver program to test above function int main() { string s = 'abcd'; subString(s, s.length()); return 0; }> Výkon
a ab abc abcd b bc bcd c cd d>
Časová zložitosť: O (N3)
Pomocný priestor: O(1)
Vytlačiť súčet všetkých podreťazcov reťazca reprezentujúceho číslo
Vzhľadom na celé číslo reprezentované ako reťazec musíme získať súčet všetkých možných podreťazcov tohto reťazca.
Príklad:
C++ // C++ program to print sum of all possible substring of // a number represented as a string #include using namespace std; // Utility method to convert character digit to // integer digit int toDigit(char ch) { return (ch - '0'); } // Returns sum of all substring of num int sumOfSubstrings(string s) { vector v; int n = s.dlzka(); pre (int i = 0; i< n; i++) { for (int len = 1; len <= n - i; len++) { string sub = (s.substr(i, len)); int x = stoi(sub); v.push_back(x); } } int res = accumulate(v.begin(), v.end(), 0); return res; } // Driver code to test above methods int main() { string num = '1234'; cout << sumOfSubstrings(num) << endl; return 0; }> Výkon
1670>
Časová zložitosť: O(N3)
Pomocný priestor: O(N)
Vytlačte maximálnu hodnotu všetkých podreťazcov reťazca reprezentujúceho číslo
Vzhľadom na celé číslo reprezentované ako reťazec potrebujeme získať maximum zo všetkých možných podreťazcov daného reťazca, ktorý predstavuje číslo.
Príklad:
C++ // C++ program to demonstrate max. of all possible // substrings of a given string #include using namespace std; void subString(string s, int n) { vector v; pre (int i = 0; i< n; i++) { for (int len = 1; len <= n - i; len++) { string sub = (s.substr(i, len)); int x = stoi(sub); v.push_back(x); } } cout << *max_element(v.begin(), v.end()) << endl; } // Driver program to test above function int main() { string s = '823'; subString(s, s.length()); return 0; }> Výkon
823>
Vysvetlenie: Všetky podreťazce sú { 8, 82, 823, 2, 23, 3 } a podreťazec s maximálnou hodnotou je 823.
Časová zložitosť: O(N3)
Pomocný priestor: O(N!)
Vytlačte minimálnu hodnotu všetkých podreťazcov reťazca reprezentujúceho číslo
Vzhľadom na celé číslo reprezentované ako reťazec potrebujeme získať minimum všetkých možných podreťazcov daného reťazca, ktorý predstavuje číslo.
Príklad:
C++ // C++ program to demonstrate minimum of all possible // substrings of a given string #include using namespace std; void subString(string s, int n) { vector v; pre (int i = 0; i< n; i++) { for (int len = 1; len <= n - i; len++) { string sub = (s.substr(i, len)); int x = stoi(sub); v.push_back(x); } } cout << *min_element(v.begin(), v.end()) << endl; } // Driver program to test above function int main() { string s = '4572'; subString(s, s.length()); return 0; }> Výkon
2>
Časová zložitosť: O(N3)
Pomocný priestor: O(N!)
Iné aplikácie podreťazca
- Vyhľadávanie textu: Podreťazce sa používajú na vyhľadávanie slov alebo fráz vo väčších častiach textu. Toto sa bežne používa vo vyhľadávačoch, kde používateľ môže zadať frázu alebo kľúčové slovo a nástroj vyhľadá všetky zhody obsahujúce tento podreťazec.
- Analýza textu: Podreťazce sa používajú v algoritmoch analýzy textu na rozdelenie väčších reťazcov na menšie časti. Analyzátor možno použiť napríklad na extrahovanie jednotlivých slov z vety a ich uloženie do dátovej štruktúry.
- Manipulácia s textom: Podreťazce sa používajú v aplikáciách na manipuláciu s textom na nájdenie a nahradenie určitých slov alebo fráz vo väčších častiach textu. Toto možno použiť na vykonávanie úloh vyhľadávania a nahrádzania alebo na aktualizáciu informácií v dokumente.
- Spracovanie prirodzeného jazyka: Podreťazce sa používajú v algoritmoch spracovania prirodzeného jazyka na identifikáciu slov a fráz. Používa sa v aplikáciách, ako je rozpoznávanie reči, kde algoritmus musí identifikovať slová vyslovené používateľom.
- Rozpoznávanie vzorov: Podreťazce sa používajú v algoritmoch rozpoznávania vzorov na identifikáciu vzorov v údajoch. To možno použiť na identifikáciu trendov vo finančných údajoch alebo na zistenie anomálií v obrázkoch.
- Zabezpečenie heslom: Podreťazce sa používajú na overenie hesiel. To sa dosiahne porovnaním zadaného hesla s uloženým podreťazcom pôvodného hesla. Ak sa tieto dva zhodujú, heslo sa overí. Táto technika sa používa v mnohých aplikáciách na zvýšenie bezpečnosti.