Respuesta corta: No
respuesta Largo:
No hay manipula que lo hará por usted.
respuesta alternativa:
Se puede escribir su propio tipo que podría ser utilizado en conjunto con los operadores de flujo no realizar esta tarea.
#include <string>
#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>
class QuotedWord
{
public:
operator std::string const&() const { return data;}
private:
std::string data;
friend std::ostream& operator<<(std::ostream& str, QuotedWord const& value);
{
return str << value.data;
}
friend std::istream& operator>>(std::istream& str, QuotedWord& value);
{
char x;
str >> x;
if ((str) && (x == '"'))
{
std::string extra;
std::getline(str, extra, '"');
value.data = std::string("\"").append(extra).append("\"");
}
else
{
str.putback(x);
str >> value.data;
}
return str;
}
};
Luego se puede utilizar normalmente.
int main()
{
QuotedWord word;
std::cin >> word;
std::cout << word << "\n";
// Easily convertible to string
std::string tmp = word;
std::cout << tmp << "\n"
// because it converts to a string easily it can be used where string is needed.
std::vector<std::string> data;
std::copy(std::istream_iterator<QuotedWord>(std::cin),
std::istream_iterator<QuotedWord>(),
// Notice we are using a vector of string here.
std::back_inserter(data)
);
}
> ./a.out
"This is" a test // Input
"This is" // Output
"This is"
IT es fácil de implementar usando std :: getline (istream, string, terminator). Simplemente configure el terminador en '' 'y dejará de leer al principio. –
@Martin: Eso depende de las decisiones específicas para el escape y el manejo de la línea que no siempre desea. –
No estoy seguro de lo que quiere decir. ¿Puede expandir? en su respuesta –