std::string::starts_with în C++

Verifică dacă șirul începe (starts_with) sau se termină (ends_with) cu un text dat (C++20).

Sintaxă
bool starts_with(std::string_view prefix) const noexcept;
bool starts_with(char c) const noexcept;
bool ends_with(std::string_view sufix) const noexcept;
bool ends_with(char c) const noexcept;

Ce face std::string::starts_with

s.starts_with("http") și s.ends_with(".pdf") răspund direct cu true sau false. Înainte de C++20 se scria s.rfind("http", 0) == 0 sau s.compare(...), mult mai greu de citit.

Acceptă un text sau un singur caracter. Comparația ține cont de litere mari și mici.

Parametri

Parametru Descriere
prefix / sufix Textul sau caracterul verificat.

Ce returnează

true sau false.

Exemple

Exemplul 1: Tipul unor fișiere și adrese

#include <iostream>
#include <string>

int main() {
    std::string fisiere[] = {"factura.pdf", "poza.JPG", "raport.pdf.exe"};
    for (const auto& f : fisiere) {
        std::cout << f << ": " << (f.ends_with(".pdf") ? "PDF" : "alt tip") << '\n';
    }

    std::string url = "https://www.dexblog.ro";
    std::cout << std::boolalpha << "Sigur: " << url.starts_with("https://") << '\n';
    std::cout << "Începe cu h: " << url.starts_with('h') << '\n';
}

Rezultat

factura.pdf: PDF
poza.JPG: alt tip
raport.pdf.exe: alt tip
Sigur: true
Începe cu h: true

Exemplul 2: Filtrarea comenzilor după prefix

#include <iostream>
#include <string>
#include <vector>

int main() {
    std::vector<std::string> coduri = {"RO-IS-101", "RO-CJ-202", "MD-CH-303", "RO-IS-404"};
    for (const auto& c : coduri) {
        if (c.starts_with("RO-IS")) {
            std::cout << c << '\n';
        }
    }
}

Rezultat

RO-IS-101
RO-IS-404

Greșeli frecvente

  • Compilezi cu un standard mai vechi decât C++20: funcțiile nu există. Adaugă -std=c++20 sau mai nou.
  • Verifici extensii fără să ții cont de majuscule: "poza.JPG".ends_with(".jpg") este false. Transformă întâi textul în litere mici.

Comenzi înrudite

  • std::string::contains: Verifică dacă șirul conține un anumit text sau caracter, oriunde în el (C++23).
  • std::string::find: Caută un text și returnează poziția primei (find) sau ultimei (rfind) apariții, ori npos.
  • std::string::compare: Compară două șiruri și returnează un număr negativ, zero sau pozitiv, ca la sortare.
  • std::string_view: Vedere doar pentru citire asupra unui text existent, fără copiere; se poate micșora la capete.