文字列から引用符を削除する

C++:
文字列から引用符を削除する

方法:

以下は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;
}

これを実行すると、以下が得られます:

Hello, World!

ほら!クォートが消えました。

詳細解説

引用符はコンピューティングの夜明け以来、テキストの厄介ものでした。昔々は、プログラマーが引用符をフィルタリングするために各文字を一つずつループするのを見ることがありました。今日では、Standard Template Library (STL)の std::removeが重い仕事をしてくれます。

代替案?もちろんです!std::regexを使用して引用符をターゲットにする正規表現を使用することもできますが、これは単純なタスクに対してはオーバーキルになる可能性のある、使用するにはあまりに強力な方法です。最近のC++のフレーバーを好む人たちは、非変更アプローチ用の std::string_viewを試してみるかもしれません。

実装に関しては、std::removeはコンテナーから要素を実際には削除しないことを覚えておいてください;それは削除されなかった要素を前方へシャッフルし、範囲の新しい終端の先のイテレータを返します。だからこそ、望ましくない末尾を切り取るために eraseメソッドが必要になります。

参照