1

Pascal Lazarus/Delphi には、任意の文字列を一重引用符で囲む QuotedStr() 関数があります。

これが私の現在の C++ コードの例です。

//I need to quote tblCustomers
pqxx::result r = txn.exec( "Select * from \"tblCustomers\" "); 

別のもの:

//I need to quote cCustomerName
std::cout << "Name: " << r[a]["\"cCustomerName\""];

上記と同様に、文字列を頻繁に二重引用符で囲む必要があります。これを入力すると、ちょっと遅くなります。これに使用できる標準機能はありますか?

ところで、私は Code::Blocks を使用して Ubuntu/Windows を使用して開発しています。使用する手法は、両方のプラットフォームで互換性がある必要があります。関数がない場合、これは、関数を作成する必要があることを意味します。

4

7 に答える 7

9

まさにそれを行うC++14 が追加されましstd::quotedた。さらに実際には、出力ストリームで引用符とバックスラッシュをエスケープし、入力ストリームでそれらをエスケープ解除します。新しい文字列を作成しないという点で効率的です。実際には IO マニピュレーターです。(したがって、必要に応じて文字列を取得できません。)

#include <iostream>
#include <iomanip>
#include <sstream>

int main()
{
  std::string in = "\\Hello \"Wörld\"\\\n";

  std::stringstream ss;
  ss << std::quoted(in);
  std::string out;
  ss >> std::quoted(out);
  std::cout << '{' << in << "}\n"
            << '{' << ss.str() << "}\n"
            << '{' << out << "}\n";
}

与える

{\Hello "Wörld"\
}
{"\\Hello \"Wörld\"\\
"}
{\Hello "Wörld"\
}

その提案で説明されているように、実際には文字列のラウンドトリップ用に設計されています。

于 2017-04-24T20:16:17.133 に答える
1
String str = "tblCustomers";
str = "'" + str + "'";

その他のオプションはこちら

于 2013-07-17T12:26:05.020 に答える
0

独自のプレースホルダー文字を使用して、決して使用されない ASCII 記号である引用符を表し、文字列を出力する直前に " に置き換えることができます。

于 2013-07-17T12:37:42.493 に答える