Publicado em C++, Programação

Dicas sobre manilupação de “strings” em C++ com base na classe “string”

Atenção!

Este artigo não pretende ser exaustivo quanto ao assunto em análise, ou seja, a manipulação de strings tendo como base os objetos da classe string.

Trata-se apenas de um conjunto de dicas muito simples para quem quer fazer um consulta rápida e seguir viagem …

Recomendo a consulta de http://www.cplusplus.com/reference/string/string/

Vou passar diretamente para os exemplos.

#1 – Declaração e leitura de strings

Neste exemplo vou declarar 3 strings e proceder à respetiva inicialização de várias formas distintas.

#include <iostream>
#include <string>
using namespace std;
int main()
{
    string s1;
    string s2("Hello String 2!");
    string s3 = "Hello String 3!";
    string s4( 1, 'z');
    cin >> s1;
    cout << s1 << endl << s2 << endl << s3 << endl << s4 << endl;
    return 0;
}

#2 – Leitura de strings

Caso tenham testado o exemplo anterior, rapidamente se aperceberam que ao introduzir o texto para a string s1, e caso este contenha espaços, apenas vamos ficar com a primeira palavra.

Ora, se o enunciado for algo do tipo “Leia uma frase e …”, lá se vão as palavras que ficam para lá do primeiro espaço!

Isto acontece pois o cin interrompe a leitura do stream assim que encontrar um espaço ou o carater correspondente a “tecla enter pressionada”.

Uma proposta de resolução seria a seguinte:

#include <iostream>
#include <string>
using namespace std;
int main()
{
    string s;
    string s2;
    getline(cin, s);
    getline(cin, s2);
    cout << s << endl;
    cout << s2 << endl;
    return 0;
}

#3 – Determinar o comprimento de uma string

Entenda-se por comprimento de uma string o seu número total de carateres.

Neste caso vamos utilizar a função membro length.

#include <iostream>
#include <string>
using namespace std;
int main()
{
    string s;
    getline(cin, s);
    cout << "Tamanho: " << s.length() << endl;
    return 0;
}

#4 – Percorrer uma string, carater a carater

Muitos exercício de programação passam por analisar os carateres de uma string, um a um.

Para tal torna-se necessário aceder a cada carater invividualmente, e realizar com este a operação pretendida.

Neste caso, pretendemos contar quantas vezes a letra “a” aparece na string.

Por exemplo, o acesso ao terceiro carater da string s faz-se através de s.at(2).

#include <iostream>
#include <string>
using namespace std;
int main()
{
    string s;
    string c;
    int contar=0;
    getline(cin, s);
    for(int i=0; i<s.length();i++)
    {
        c = s.at(i);
        cout << "Carater na posição [" << i << "] -> " << c << endl;
        if(c == "a")
            contar++;
    }
    cout << "O carater 'a' surge " << contar << " vezes." << endl;
    return 0;
}

#5 – Concatenar strings

Podemos concatenar várias strings de forma a obter uma que resulta da combinação das restantes.

Concatenar é o mesmo que juntar.

Vamos imaginar um exemplo no qual é fornecido o nome de uma animal seguido da sua comida preferida.

Experimentem! Basta “somar” :)

#include <iostream>
#include <string>
using namespace std;
int main()
{
    string s;
    string c;
    int contar=0;
    getline(cin, s);
    for(int i=0; i<s.length();i++)
    {
        c = s.at(i);
        cout << "Carater na posição [" << i << "] -> " << c << endl;
        if(c == "a")
            contar++;
    }
    cout << "O carater 'a' surge " << contar << " vezes." << endl;
    return 0;
}

#6 – Substituir carateres numa string

Este tópico resulta de uma questão formulada pelos famosos “BrosWithProject” :)

Desta vez, vamos ver uma forma muito simples de mover todos os carates, um a um, de uma string para outra.

Este processo permite resolver muitos problemas clássicos, ficando o resultado final dependente daquilo que se faz com cada carater extraído.

Vamos então trocar os “v” pelos “b”.

#include <string>
using namespace std;
int main()
{
    string antiga;
    string nova = "";
    string carater;
    getline(cin, antiga);
    for(int i=0; i<antiga.length();i++)
    {
        carater = antiga.substr(i,1);
        if(carater == "v")
            nova+="b";
        else
            if(carater == "b")
                nova+="v";
            else
                nova+=carater;
    }
    cout << nova << endl;
    return 0;
}

#? – E a seguir?

Este é um artigo inacabado que vou preenchendo à medida que forem sugindo as questões :)

Anúncios

Uma opinião sobre “Dicas sobre manilupação de “strings” em C++ com base na classe “string”

Deixe uma Resposta

Preencha os seus detalhes abaixo ou clique num ícone para iniciar sessão:

Logótipo da WordPress.com

Está a comentar usando a sua conta WordPress.com Terminar Sessão / Alterar )

Imagem do Twitter

Está a comentar usando a sua conta Twitter Terminar Sessão / Alterar )

Facebook photo

Está a comentar usando a sua conta Facebook Terminar Sessão / Alterar )

Google+ photo

Está a comentar usando a sua conta Google+ Terminar Sessão / Alterar )

Connecting to %s