C++:
Usuwanie cudzysłowów z ciągu znaków
Jak to zrobić:
Oto prosty sposób, aby pozbyć się cudzysłowów w 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"("Hello, 'World'!")";
std::string no_quotes = remove_quotes(original);
std::cout << no_quotes << std::endl;
return 0;
}
Uruchom to, a otrzymasz:
Hello, World!
I proszę! Cudzysłowy zniknęły.
Szczegółowa analiza
Cudzysłowy są utrapieniem w tekście od zarania komputeryzacji. W przeszłości widywało się programistów, którzy mozolnie przeszukiwali każdy znak, aby odfiltrować te cudzysłowy. Dzisiaj mamy std::remove
w Standard Template Library (STL), aby wykonać tę ciężką pracę.
Alternatywy? Jasne! Można użyć wyrażeń regularnych z std::regex
, aby celować w cudzysłowy, ale to trochę jak używanie młota kowalskiego do pęknięcia orzecha - potężne, ale może być nadmiarem dla prostych zadań. Dla tych, którzy preferują nowsze wersje C++, można pokusić się o std::string_view
dla metod niezmieniających.
Jeśli chodzi o implementację, należy pamiętać, że std::remove
faktycznie nie usuwa elementów z kontenera; przesuwa elementy nieusunięte do przodu i zwraca iterator za nowy koniec zakresu. Dlatego potrzebujemy metody erase
, aby odciąć niechciany ogon.
Zobacz też
- Referencje C++
std::remove
: cppreference.com - Więcej o manipulacji
std::string
: cplusplus.com