Ta bort citattecken från en sträng

C++:
Ta bort citattecken från en sträng

Hur man gör:

Här är ett rakt på sak sätt att kasta ut de där citattecknen till trottoarkanten i C++:

#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"("Hej, 'Världen'!")";
    std::string utan_citat = remove_quotes(original);
    std::cout << utan_citat << std::endl;
    return 0;
}

Kör detta, och du får:

Hej, Världen!

Voila! Citattecknen har försvunnit.

Djupdykning

Citattecken har varit en textplåga sedan datorernas gryning. Förr i tiden skulle du se programmerare mödosamt loopa igenom varje tecken för att filtrera bort de där citaten. Idag har vi std::remove i Standard Template Library (STL) för att göra det tunga lyftet.

Alternativ? Självklart! Du kan använda reguljära uttryck med std::regex för att rikta in dig på citat, men det är lite som att använda en slägga för att knäcka en nöt - kraftfullt, men kan vara överdrivet för enkla uppgifter. För de som föredrar senare smaker av C++, kanske ni experimenterar med std::string_view för icke modifierande angreppssätt.

När det gäller implementation, kom ihåg att std::remove faktiskt inte tar bort element från behållaren; det flyttar fram icke-borttagna element och returnerar en iterator bortom det nya slutet av omfånget. Det är därför vi behöver erase-metoden för att hugga av den oönskade svansen.

Se Också