A citar textos em C++

em Pascal Lazarus / Delphi, temos uma função QuotedStr() que envolve qualquer cadeia dentro de aspas simples.

aqui está um exemplo do meu código C++ actual:

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

Outro:

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

semelhante ao acima, eu tenho que frequentemente aspas duplas. Digitar isto está a atrasar-me. Há alguma função padrão que eu possa usar para isso?

BTW, eu desenvolvi usando Ubuntu / Windows Com Código:: Blocos. A técnica utilizada deve ser compatível em ambos os casos. plataforma. Se não há função, isto significa que tenho de escrever uma.

Author: itsols, 2013-07-17

6 answers

String str = "tblCustomers";
str = "'" + str + "'";

Veja Mais opções aqui

 0
Author: levengli, 2017-05-23 12:02:29

Se usar o C++11, poderá criar literais definidos pelo utilizador como este:

#include <iostream>
#include <string>
#include <cstddef>

// Define user defined literal "_quoted" operator.
std::string operator"" _quoted(const char* text, std::size_t len) {
    return "\"" + std::string(text, len) + "\"";
}

int main() {
    std::cout << "tblCustomers"_quoted << std::endl;
    std::cout << "cCustomerName"_quoted << std::endl;
}

Resultado:

"tblCustomers"
"cCustomerName"

Pode até definir o operador com um nome mais curto, se quiser, por exemplo:

std::string operator"" _q(const char* text, std::size_t len) { /* ... */ }
// ...
std::cout << "tblCustomers"_q << std::endl;

Mais informações sobre os literais definidos pelo utilizador

 5
Author: Snps, 2016-10-07 03:36:30

O C++14 adicionou std::quoted o que faz exatamente isso, e mais na verdade: ele tem o cuidado de escapar de citações e recuos em fluxos de saída, e de desclassificá-los em fluxos de entrada. É eficiente, na medida em que não cria uma nova corda, é realmente um manipulador IO. (Então você não tem um fio, como você gostaria.)

#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"\
}

Tal como descrito em a sua proposta, foi realmente concebida para o rebentamento de cordas.

 4
Author: akim, 2017-04-24 20:16:17

Nenhuma Função padrão, a menos que você conte std::basic_string::operator+(), mas escrever é trivial.

Estou um pouco confuso com o que te está a atrasar. são mais personagens, não é? :>
 0
Author: SteveLove, 2013-07-17 12:29:31

Poderá usar o seu próprio carácter de substituição para representar a citação, algum símbolo ASCII que nunca será usado, e substituí-lo por " pouco antes de enviar as cadeias de caracteres.

 0
Author: Neil Kirk, 2013-07-17 12:37:42
#include <iostream>
#include <string>

struct quoted
{
    const char * _text;
    quoted( const char * text ) : _text(text) {}

    operator std::string () const
    {
        std::string quotedStr = "\"";
        quotedStr += _text;
        quotedStr += "\"";
        return quotedStr;
    }
};

std::ostream & operator<< ( std::ostream & ostr, const quoted & q )
{
    ostr << "\"" << q._text << "\"";
    return ostr;
}

int main ( int argc, char * argv[] )
{
    std::string strq = quoted( "tblCustomers" );
    std::cout << strq << std::endl;

    std::cout << quoted( "cCustomerName" ) << std::endl;
    return 0;
}
Com isto consegues o que queres.
 0
Author: Alexander Drichel, 2014-07-02 10:22:31