O que é o C ++ StringStream e como usá -lo?

O que é o C ++ StringStream e como usá -lo?

Um objeto String instanciado da classe String é uma estrutura de dados de lista. A lista é uma série de personagens e é apreciada como tal. O objeto String C ++ tem muitos métodos. No entanto, falta certas operações, que são melhor oferecidas se for visto como um fluxo. É aí que Fream entra. Fream é um fluxo, que pode ser usado para:

- Conte o número de palavras em um objeto de string

- Obter frequências individuais de palavras em um objeto de string

- Converta uma palavra em forma de texto no objeto String em um número e vice-versa

Mover caracteres do objeto String para o programa C ++ é inserida e representada pelo Fream objeto. Mover caracteres do programa C ++ para o objeto String está emitindo. StringStream (i.e. sStream) usa o istringStream e ostringstream Aulas. Um objeto instanciado de istringStream é responsável por inserir caracteres para um Fream. Um objeto instanciado de ostringstream é responsável por produzir caracteres de um Fream para um objeto de string.

Este tutorial explica o que sstream é e como usá -lo. O objeto String de destino faz parte do programa C ++.

Para fazer entrada, saída ou ambos, em uma sessão, o programa C ++ deve começar com:

#incluir
#incluir
#incluir

Conteúdo do artigo

  • Criando um objeto StingStream
  • Operação de forming de entrada de entrada
  • Operação de StringStream de saída
  • Enviando as primeiras poucas palavras em variáveis
  • Contando o número de palavras em string literal
  • Frequências de palavras individuais
  • String para número e vice-versa
  • Conclusão

Criando um objeto StingStream

Sabe-se que Fream pode ser declarado e aplicado ao mesmo tempo em uma declaração. No entanto, essa não é a abordagem neste tutorial. Neste tutorial, um Fream O objeto é instanciado de uma classe em uma declaração e usado em outra declaração.

A Fream pode ser instanciado para leitura (entrada). A Fream pode ser instanciado para escrever (saída). A Fream pode ser instanciado para leitura e escrita.

Para criar um objeto de fluxo para leitura, use:

sStream STRM (iOS_BASE :: in);

onde strm é o objeto de fluxo; e “in” da classe iOS_Base significa para ler.

Para criar um objeto de fluxo para escrever, use:

SStream STRM (iOS_BASE :: Out);

onde strm é o objeto de fluxo; e "fora" da classe iOS_Base significa para escrever.

Para criar um objeto de fluxo para ler ou escrever, use:

SStream STRM (iOS_BASE :: in | iOS_BASE :: Out);

onde “ios_base :: in | ios_base :: Out ”, é para ler ou escrever.

Operação de forming de entrada de entrada

O texto para inserção para um seio de um objeto de string pode ser feito de duas maneiras: usando a inserção (<<) operator or using the str() member function of the sstream class. The following program illustrates this for both ways:

#incluir
#incluir
#incluir
usando namespace std;
int main ()

StringStream STRM1 (iOS_BASE :: in);
STRM1 << "We are the world!";
string stri2 = "Esta é a terra!";
StringStream STRM2 (iOS_BASE :: in);
STRM2 << stri2;
stringStream STRM3 (iOS_BASE :: in);
STRM3.str ("Marte é o próximo.");
String stri4 = "E Júpiter?";
stringStream STRM4 (iOS_BASE :: in);
STRM4.STR (STRI4);
retornar 0;

O objeto String pode ser o literal ou o identificador. Observe que, na declaração do objeto SStream, "StringStream" é usado e não "sStream", embora ambos os termos signifiquem a mesma coisa. O termo sstream deve ser usado na diretiva incluir.

Operação de StringStream de saída

Uma palavra é qualquer texto de string que não tenha espaço (") dentro. Sair de um StringStream significa enviar uma palavra de string do objeto SStream para um objeto String. Isso precisa do operador de extração (>>). O programa a seguir envia uma palavra de um objeto SStream para um objeto String:

#incluir
#incluir
#incluir
usando namespace std;
int main ()

stringStream strm;
strm << "love";
string stri = "ódio";
strm >> stri;
cout << stri << endl;
retornar 0;

A saída é:

amor

Qualquer valor de string que o objeto da string possa ter tido é substituído. Se o forno for declarado acima e sem nenhum argumento, é para entrada ou saída.

Se o valor da string do objeto StringStream (buffer) tiver espaços, apenas a primeira palavra será enviada. A função do membro SStream, str (), deve ser usada para enviar todo o valor da string, incluindo os espaços. Str () pode ser usado para converter uma string literal no conteúdo sstream. Também pode ser usado para retornar todo o conteúdo do buffer de fluxo, incluindo os espaços, ao objeto String. O programa a seguir ilustra o seguinte:

#incluir
#incluir
#incluir
usando namespace std;
int main ()

stringStream strm;
strm << "I love her, but he hates her.";
string stri;
STRI = STRM.str ();
cout << stri << endl;
retornar 0;

A saída é:

Eu a amo, mas ele a odeia.

Enviando as primeiras poucas palavras em variáveis

Na string,

“Eu a amo, mas ele a odeia.”

Se as 5 primeiras palavras forem representadas pelas variáveis, a, b, c, d, e, então essas variáveis ​​podem ser feitas para manter as palavras. O código a seguir ilustra o seguinte:

#incluir
#incluir
#incluir
usando namespace std;
int main ()

stringStream strm;
strm << "I love her, but he hates her.";
string a, b, c, d, e;
strm >> a >> b >> c >> d >> e;
cout << a << " << b << " << c << " << d << " << e << endl;
retornar 0;

A saída é:

Eu a amo, mas ele

Um único personagem é uma palavra. Observe que a vírgula foi unida com "ela". Se a vírgula tivesse sido separada de "ela", então teria sido considerado uma palavra separada.

Contando o número de palavras em string literal

Na seção anterior, apenas as 5 primeiras palavras foram identificadas. Para enviar todas as palavras para diferentes variáveis, o número de palavras deve ser conhecido. Se o problema é apenas para saber o número de palavras no buffer SStream, isso pode ser feito em um loop enquanto. É enviando todas as palavras para uma variável, enquanto conta o número de vezes que o envio é feito e até o final do fluxo (final de arquivo) é alcançado. O código a seguir ilustra o seguinte:

#incluir
#incluir
#incluir
usando namespace std;
int main ()

stringStream strm;
strm << "I love her, but he hates her.";
int contador = 0;
temp de string;
enquanto (!strm.eof ())
STRM >> temp;
contador += 1;

cout << counter << endl;
retornar 0;

A saída é 7. O ponto final está preso ao segundo "ela". Observe que o indicador para o final do arquivo é a função do membro SStream, eof ().

Frequências de palavras individuais

No valor da string,

"Eu a amo, e ele ama a irmã dela, embora ele odeie o irmão dela."

A palavra, "ela", ocorre 3 vezes, e a frequência de "ela" é indicada como 3. A palavra, "ele", aparece 2 vezes, e a frequência de "ele" é considerada 2. O restante das palavras tem uma frequência de 1 cada. A frequência de cada palavra pode ser determinada da seguinte forma:

Tenha todas as palavras em um mapa C ++ sem repetição. Considere a seguinte declaração:

MP [temp] ++;

onde MP é um objeto de mapa. Na primeira vez em que essa afirmação é encontrada em um loop de tempo, ele se encaixa em um novo par de chaves/valores, cuja chave é a palavra string da temp variável e cujo valor é 1. Na próxima vez que for encontrado no mesmo loop de enquanto, com essa chave em particular, nenhum novo par de chave/valor é adicionado ao mapa. O valor desse par de chave/valor é simplesmente incrementado.

Portanto, a estratégia é ter essa afirmação em um loop de tempo e todas as palavras no buffer ssStream sendo lido em uma variável temporária. E cada valor para cada par de chave/valor no mapa finalmente se torna a frequência da chave (palavra). O programa a seguir ilustra o seguinte:

#incluir
#incluir
#incluir
#incluir
usando namespace std;
int main ()

stringStream strm;
strm << "I love her and he loves her sister, though he hates her brother.";
temp de string;
mapa MP;
while (strm >> temp)
MP [temp] ++;

para (mapa:: iterator it = MP.começar(); isto != MP.fim(); IT ++)
cout << it->primeiro << " => " << it->segundo << endl;
retornar 0;

A saída é:

I => 1
e => 1
irmão. => 1
odeia => 1
ele => 2
ela => 3
amor => 1
Loves => 1
irmã, => 1
embora => 1

String para número e vice-versa

String to number

Para converter uma palavra de string em um número, basta enviar a palavra string do buffer sstrream para uma variável declarada como um número. Para converter para um int, envie a palavra string para uma variável int. Para converter em um flutuador, envie a palavra string para uma variável flutuante. O programa a seguir ilustra estos:

#incluir
#incluir
#incluir
usando namespace std;
int main ()

stringStream strm;
strm << " 30 ";
int myint;
strm >> myint;
int intresult = myint + 10;
cout << intResult << endl;
strm << " 2.5 ";
flutuar myfloat;
strm >> myfloat;
Float FLTRESULT = MyFloat + 0.3;
cout << fltResult << endl;
retornar 0;

A saída é:

40
2.8

Número para string

Para converter um número em uma palavra de string, basta enviar o número para o buffer sstream. Em seguida, leia o buffer de fluxo em um objeto de string. Para converter um int em uma string, enviou o número inteiro ao SStream. Para converter um flutuador em uma corda, envie o flutuador para o sstream. O programa a seguir ilustra estos:

#incluir
#incluir
#incluir
usando namespace std;
int main ()

stringStream STRM1;
int myint = 30;
STRM1 << myInt;
string intstr;
strm1 >> intstr;
string intstrres = intstr + "bom";
cout << intStrRes << endl;
stringStream STRM2;
flutuar myflt = 2.5;
STRM2 << myflt;
string flttr;
strm2 >> flttr;
string fltstrres = fltStr + "sim";
cout << fltStrRes << endl;
retornar 0;

A saída é:

30 bom
2.5 Sim

Dois objetos de fluxo foram usados ​​aqui para os diferentes tipos de números.

Observação: o sstream Buffer consiste apenas em personagens.

Conclusão

Fream significa Fluxo de string. Também está escrito como sstream. É um fluxo. O alvo para este fluxo é um objeto de string. O fluxo pode usar o operador de inserção (<>). O fluxo é muito útil para os seguintes propósitos: contando o número de palavras em um objeto de string, obtendo frequências individuais de palavras em um objeto String e convertendo uma palavra em forma de texto no objeto String em um número e vice-versa.