Converter um inteiro numa string em C++ (C++11 ISO)

O número 32 é convertido numa string, que depois é concatenado ao texto “string: ” para ser mostrada.

#include
using namespace std;

int main()
{
    int n=32;
    string s=to_string(n);
    cout << "string: " + s  << endl;
    return 0;
}

Anúncios

Converter uma string num inteiro em C++ (C++11 ISO)

O número 32 está armazenado numa string, é convertido num inteiro e é mostrado incrementado.

#include
using namespace std;

int main()
{
    string s="32";
    int n=stoi(s);
    cout << n + 1 << endl;

    return 0;
}

Não esquecer das opções do compilador …

Mais info: std:: sto@

Como inverter uma palavra (string) em C++?

Ler uma palavra e apresentar a sua inversa pode ser uma tarefa relativamente simples, desde que cada um decida não complicar.

Vamos ver um primeiro exemplo:

#include 
using namespace std;
int main()
{
    string s, nova="";
    cin >> s;
    for(int i=0; i<s.length(); i++)
        nova= s[i] + nova;
    cout << nova << endl;
    return 0;
}

Neste caso optamos por criar uma nova string contendo a palavra invertida. Simples e rápido!

Vamos agora considerar outro exemplo, partindo do princípio que desejamos fazer a troca das letras dentro da própria string. Por exemplo:

#include 
#include 
using namespace std;
int main()
{
    string s;
    cin >> s;
    int p = s.length() - 1;
    for(int i=0; i<s.length()/2; i++)
    {
        char t = s[i];
        s[i] = s[p];
        s[p] = t;
        p--;
    }
    cout << s << endl;
    return 0;
}

Ou até mesmo partindo do princípio que uma string não é mais do que um array de carateres, recorrendo à função reverse e tratando de tudo numa única linha:

#include 
#include 
using namespace std;
int main()
{
    string s;
    cin >> s;
    reverse(s.begin(),s.end());
    cout << s << endl;
    return 0;
}

Claro que tudo isto já foi mais do que dito All over the Internet!

Então porque razão publico?

Trata-se apenas de uma desabafo. Alguém me entregou programas muito complexos para tentar resolver esta tarefa tão simples.


 

Como obter o próximo id livre de uma tabela MySQL (C# WPF)

Mais uma dica que pode ser útil … mas apenas em monoposto!

Antes de inserir um novo registo, sem recurso ao AUTO_INCREMENT, podemos desejar saber o valor do campo chave, que será obtido incrementando o id de valor mais alto.

Deixo aqui uma forma de o conseguir que, embora pouco sofisticada, faz o serviço.

#region Calcular o próximo id livre
private void mostarBtn_Click(object sender, RoutedEventArgs e)
{
    try
    {
        ligacaoBD.Open();
        string stm = "select max(idContacto) as x from contacto";
        MySqlCommand cmd = new MySqlCommand(stm, ligacaoBD);
        int id;
        Int32.TryParse(cmd.ExecuteScalar().ToString(), out id);
        id++;
        MessageBox.Show("O próximo id é " + id.ToString());
    }
    catch
    {
        MessageBox.Show("Erro!");
    }
        finally
    {
        ligacaoBD.Close();
    }

}
#endregion

Link para download da base de dados e código:

https://app.box.com/s/r1bqtvburr1dknn2455ntzenyadvs6ln

Exemplo C++ – Comparar duas datas que se encontram armazenadas numa estrutura

 

#include <iostream>
#include <iomanip>
#include <sstream>
#include <string>
using namespace std;
struct mydata
{
    int ano, mes, dia;
    string aaaammdd;
};
int main()
{
    mydata d1, d2;
    ostringstream c1, c2;

    //Definir a primeira data
    d1.ano = 1970;
    d1.mes = 1;
    d1.dia = 9;
    c1 << fixed << setfill('0') << setw(4) << d1.ano << setw(2) << d1.mes << setw(2) << d1.dia;
    d1.aaaammdd = c1.str();
    cout << d1.aaaammdd << endl;

    //Definir a segunda data
    d2.ano = 2015;
    d2.mes = 10;
    d2.dia = 12;
    c2.clear();
    c2 << fixed << setfill('0') << setw(4) << d2.ano << setw(2) << d2.mes << setw(2) << d2.dia;
    d2.aaaammdd = c2.str();
    cout << d2.aaaammdd << endl;

    // Comparar as datas = comparar inteiros :)
    if(d1.aaaammdd < d2.aaaammdd)
        cout << d1.aaaammdd;
    else
        cout << d2.aaaammdd;
    cout << endl;

    return 0;
}

 

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;
}

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

Exemplo C++ – Validar o tipo de dados recebido via cin

Quando estamos a escrever pequenos programas, que utilizam o objeto cin para fazer a leitura de valores, é frequente depararmos com situações deste tipo:

#include <iostream>
using namespace std;
int main()
{
    int nota;
    cin >> nota;
    if(nota<0 || nota>20)
        cout << "Inseriu uma nota inválida" << endl;
    else
        if(nota<10)
            cout << "O aluno foi reprovado" << endl;
        else
            cout << "O aluno foi aprovado" << endl;
    return 0;
}

Se repararem, o programa funciona muito bem se o utilizador for “educadinho”, ou seja, se fornecer apenas números inteiros.

No caso de este ser distraído, ou malandreco, em vez de um número inteiro, os resultados podem ser imprevisíveis. Experimentem e vejam o que acontece para os seguintes exemplos de input:

  • t
  • Z
  • x

Pois é! Todos reprovados, mesmo sem se saber a nota. Nem uma satisfação!

Uma forma muito simples de contornar esta limitação é a seguinte:

#include <iostream>
using namespace std;
int main()
{
    int nota;
    if(!(cin >> nota) || nota<0 || nota>20)
        cout << "Inseriu uma nota inválida" << endl;
    else
        if(nota<10)
            cout << "O aluno foi reprovado" << endl;
        else
            cout << "O aluno foi aprovado" << endl;
    return 0;
}

Atendendo a que nota é uma variável do tipo int, cin >> nota irá devolver o valor lógico falso caso não receba um número inteiro (int).

Assim sendo, basta adicionais mais uma condição ao nosso if!

Construção de algoritmos em Pseudocódigo – enquanto … fazer … fimfazer

Trata-se de uma estrutura de repetição, controlada pela avaliação do valor lógico de uma condição.

Este tipo de estruturas são geralmente designadas por “ciclos“.

enquanto &lt;condição&gt;
fazer
    instrução 1
    instrução 2
    . . .
    instrução n
fimfazer

Assim temos:

  • <condição> é uma expressão lógica que, sendo verdadeira, determina que se voltem a executar as instruções contidas no ciclo. Caso esta expressão tenha o valor lógico falso, o controlo passa para a instução seguinte, sendo o ciclo abandonado.
  • instrução 1 … instrução n  corresponde ao bloco de instruções que vão ser executados em cada iteração (entenda-se iteração como uma “volta”, tendo presente a noção de cliclo).

Este tipo de estrutura tem infinitas aplicações mas, em termos genéricos, podemos afirmar que se utiliza sempre que:

  • pretendermos repetir 0 bloco de instruções um número indeterminado de vezes;
  • o número de iterações, ou seja, o número de vezes que se repete o ciclo, depende do valor lógico da candição;
  • fazendo variar os valores das variáveis que são utilizadas na condição permite controlar o respetivo valor lógico, consequentemente, continuar a iterar ou terminar.

Vamos pensar, a título de exemplo, no seguinte problema:

“Dada uma sequência de números, terminada por um número negativo, calcular a média dos seus elementos.”

Algoritmo em pseudocódigo

Nome MédiaN
Descrição
    Dada uma sequência de números, cujo fim é assinalado por um número
    negativo, este algoritmo calcula a respetiva média.
Variáveis
    contar: Inteiros
    num, soma, média: Real
Início
    contar ← 0
    soma ← 0
    ler (num)
    enquanto ( num >= 0 )
    fazer
        contar ← contar + 1
        soma ← soma + num
        ler (num)
    fimfazer
    média ← soma / contar
    escrever (média)
fim

Seguem-se uma implementação deste problema.

Em linguagem C++

#include <iostream>
using namespace std;
int main()
{
    int contar;
    double num, soma, media;
    contar = 0;
    soma = 0;
    cin >> num;
    while(num >=0)
    {
        contar = contar + 1;
        soma = soma + num;
        cin >> num;
    }
    media = soma/contar;
    cout << media;
    return 0;
}
Anterior Índice Seguinte

Construção de algoritmos em Pseudocódigo – selecionar caso … fimselecionar

Depois de alguns exercício a aplicar a estrutura se… então… senão… fimse, provavelmente acabamos por concluir que, em certos casos específicos, não é muito prática a sua utilização.

Vamos pensar, a título de exemplo, no seguinte problema:

“Dado um número inteiro, compreendido entre 1 e 4, representando os quatro trimestres do ano, vamos fazer corresponder a sua descrição por extenso.”

Algoritmo em pseudocódigo

Nome Trimestres
Descrição
    Dado um número inteiro, compreendido entre 1 e 4, representando
    os quatro trimestres do ano, este programa faz corresponder a
    sua descrição por extenso.
Variáveis
    trimestre: Inteiro
Início
    ler (trimestre)
    se trimestre = 1
    então   escrever("Primeiro trimestre")
    senão   se trimestre = 2
            então   escrever("Segundo trimestre")
            senão   se trimestre = 3
                    então   escrever("Terceiro trimestre")
                    senão   se trimestre = 4
                            então   escrever("Quarto trimestre")
                            senão   escrever("ERRO!")
                            fimse
                    fimse
            fimse
    fimse
fim

Neste ponto já somos convidados a pensar como ficaria esta estrutura encadeada para outros exemplos como:

  • os dias da semana;
  • os meses do ano;
  • os signos;

Continue reading “Construção de algoritmos em Pseudocódigo – selecionar caso … fimselecionar”