Merkkijonosta lainausmerkkien poistaminen

C++:
Merkkijonosta lainausmerkkien poistaminen

Kuinka:

Tässä suoraviivainen tapa heittää nuo lainausmerkit roskakoriin C++:ssa:

#include <iostream>
#include <algorithm>

std::string remove_quotes(std::string input) {
    input.erase(std::remove(input.begin(), input.end(), '\"'), input.end());
    input.erase(std::remove(input.begin(), input.end(), '\''), input.end());
    return input;
}

int main() {
    std::string original = R"("Hei, 'Maailma'!")";
    std::string no_quotes = remove_quotes(original);
    std::cout << no_quotes << std::endl;
    return 0;
}

Aja tämä, ja saat:

Hei, Maailma!

Kas vain! Lainausmerkit ovat hävinneet.

Syvempi sukellus

Lainausmerkit ovat olleet tekstiharmi tietojenkäsittelyn alusta lähtien. Aikanaan näit ohjelmoijien vaivalloisesti luuppavan jokaisen merkin läpi suodattaakseen nuo lainausmerkit pois. Nykyään meillä on Standard Template Libraryn (STL) std::remove tehdäksemme raskaan työn.

Vaihtoehtoja? Tietysti! Voisit käyttää säännöllisiä lausekkeita std::regex avulla kohdistaaksesi lainausmerkkeihin, mutta se on vähän kuin käyttäisi lekaa pähkinän murtamiseen - tehokasta, mutta voi olla liioittelua yksinkertaisille tehtäville. Ne, jotka suosivat uudempia C++-makuja, saattavat kokeilla std::string_view'ta muuttamattomiin lähestymistapoihin.

Toteutusmielessä, muista että std::remove ei itse asiassa poista elementtejä säiliöstä; se siirtää poistamattomat elementit eteenpäin ja palauttaa iterattorin uuden alueen loppuun. Siksi tarvitsemme erase-metodin leikkaamaan ei-toivotun hännän pois.

Katso myös