PHP ::: Dicas & Truques ::: Strings e Caracteres |
Como usar a função strpos() do PHP para encontrar a posição da primeira ocorrência de uma substring em uma stringQuantidade de visualizações: 6267 vezes |
Em algumas situações gostaríamos de encontrar a posição da primeira ocorrência de uma substring em uma string usando PHP. Para isso podemos usar a função strpos(). Veja sua assinatura:mixed strpos(string $haystack, mixed $needle[, int $offset = 0]) O parâmetro $haystack é a string na qual a substring será pesquisada e $needle é a substring que queremos pesquisar. O parâmetro opcional $offset é o índice a partir do qual a pesquisa será feita. Na ausência deste parâmetro, a pesquisa será feita a partir do primeiro caractere da string. Veja um trecho de código no qual tentamos encontrar o índice da primeira ocorrência da palavra "PHP" na frase "Eu gosto de PHP": <?php $pos = strpos("Eu gosto de PHP", "PHP"); if($pos === false){ echo "A substring não foi encontrada."; } else{ echo "A substring foi encontrada no índice: " . $pos; } ?> Ao executarmos este trecho de código nós teremos o seguinte resultado: A substring foi encontrada no índice: 12 Fique atento ao uso do operador "===" para testar o retorno da função strpos(). Se você quiser inverter o teste, basta usar o operador "!==". Para finalizar, note que a função strpos() diferencia maiúsculas de minúsculas. Se você quiser efetuar uma pesquisa de substrings desconsiderando maiúsculas e minúsculas, use a função stripos(). Ambas as funções strpos() e stripos() podem provocar o erro "Offset not contained in string" se o valor do parâmetro $offset não estiver entre 0 (incluindo e o tamanho da string. |
Java ::: Dicas & Truques ::: Programação Orientada a Objetos |
Como criar e usar métodos estáticos em suas classes Java - Programação Orientada a Objetos em Java - Java OOPQuantidade de visualizações: 13603 vezes |
Como já vimos em outras dicas desta seção, uma classe Java possui propriedades (variáveis) e métodos (funções). Veja a seguinte declaração de uma classe Produto:package estudos; // declaração da classe Produto public class Produto { private String nome; private double preco; public String getNome() { return nome; } public void setNome(String nome) { this.nome = nome; } public double getPreco() { return preco; } public void setPreco(double preco) { this.preco = preco; } } Aqui cada instância da classe Produto terá suas próprias variáveis nome e preco e os métodos que permitem acesso e alteração destas variáveis também estão disponíveis a cada instância. Há, porém, situações nas quais gostaríamos que um determinado método estivesse atrelado à classe e não à cada instância individual. Desta forma, é possível chamar um método de uma classe sem a necessidade da criação de instâncias da mesma. O método main() presente em todas as aplicações Java é um bom exemplo deste tipo de método. Métodos estáticos em Java podem ser criados por meio do uso da palavra-chave static. É comum tais métodos serem declarados com o modificador public, o que os torna acessíveis fora da classe na qual estes foram declarados. Veja um exemplo: Código para Pessoa.java: package estudos; // classe Pessoa com duas variáveis privadas e // um método estático public class Pessoa { private String nome; private int idade; // um método estático que permite verificar a validade // de um número de CPF public static boolean isCPFValido(String cpf){ // alguns cálculos aqui return true; } } Veja agora como podemos chamar o método isCPFValido() sem a necessidade da criação de uma nova instância da classe Pessoa: Código para Main.java: package estudos; public class Main { public static void main(String[] args) { // vamos efetuar uma chamada ao método isCPFValido() sem // criar uma instância da classe Pessoa if(Pessoa.isCPFValido("12345")){ System.out.println("CPF Válido"); } else{ System.out.println("CPF Inválido"); } } } Note que o método estático isCPFValido() da classe Pessoa foi declarado assim: public static boolean isCPFValido(String cpf); Desta forma, podemos chamá-lo a partir de código externo à classe sem a necessidade de criar uma nova instância da mesma. Veja: if(Pessoa.isCPFValido("12345")){} É importante notar que métodos estáticos não possuem acesso a variáveis e métodos não estáticos da classe, tampouco ao ponteiro this (que só existe quando criamos instâncias da classe). Assim, o trecho de código abaixo: // um método estático que permite verificar a validade // de um número de CPF public static boolean isCPFValido(String cpf){ // alguns cálculos aqui // vamos acessar a variável não estática nome nome = "Osmar J. Silva"; return true; } vai gerar o seguinte erro de compilação: Uncompilable source code - non-static variable nome cannot be referenced from a static context. Se usarmos this.nome a mensagem de erro de compilação será: Uncompilable source code - non-static variable this cannot be referenced from a static context. Métodos estáticos são úteis quando precisamos criar classes que atuarão como suporte, nas quais poderemos chamar funções (métodos) auxiliares sem a necessidade de criar novas instâncias a cada vez que estas funções forem necessárias. |
Delphi ::: VCL - Visual Component Library ::: TStringGrid |
Como definir a altura padrão das linhas em um TStringGrid do Delphi usando a propriedade DefaultRowHeightQuantidade de visualizações: 10936 vezes |
A propriedade DefaultRowHeight é útil quando queremos obter ou definir a altura padrão das linhas de um TStringGrid. Por padrão, o valor desta propriedade é 24 pixels. Veja no trecho de código abaixo como o valor desta propriedade é obtido: procedure TForm1.Button1Click(Sender: TObject); begin // vamos obter a altura padrão das linhas // do TStringGrid Memo1.Lines.Add('A altura padrão das linhas do TStringGrid é: ' + IntToStr(StringGrid1.DefaultRowHeight)); end; Ao executar este trecho de código você terá o seguinte resultado: A altura padrão das linhas do TStringGrid é: 24. Podemos definir a altura padrão das linhas do TStringGrid em tempo de design ou execução simplemente definindo um valor inteiro para sua propriedade DefaultRowHeight. Veja: procedure TForm1.Button1Click(Sender: TObject); begin // vamos definir a altura padrão das linhas // do TStringGrid StringGrid1.DefaultRowHeight := 50; end; Quando novas linhas são adicionadas por meio da propriedade RowCount, suas alturas serão aquelas da propriedade DefaultRowHeight. |
Java ::: Pacote java.lang ::: StringBuffer |
Curso completo de Java - Como usar a classe StringBuffer da linguagem JavaQuantidade de visualizações: 9321 vezes |
A classe StringBuffer, no pacote java.lang, representa uma sequencia de caracteres mutável e segura em relação a threads. Um objeto StringBuffer é parecido com uma String, com a diferença que um StringBuffer pode ser modificado in-place, ou seja, modificações em seu conteúdo não geram uma nova cópia, como acontece com objetos da classe String. Veja a posição desta classe na hierarquia de classes Java: java.lang.Object java.lang.StringBuffer A qualquer momento um StringBuffer contém uma sequencia de caracteres em particular, mas o tamanho e o conteúdo da sequencia pode ser alterado por meio de certas chamadas de métodos. Objetos StringBuffer são seguros para acesso em um ambiente de múltiplas threads. Os métodos são sincronizados (synchronized) onde necessário de forma a garantir que todas as operações em uma instância em particular se comportem como se estivessem em ordem serial, ou seja, sejam consistentes com a ordem das chamadas de métodos feitas por cada uma das threads envolvidas. As operações principais de um StringBuffer são os métodos append() e insert(), que são sobrecarregados para aceitar dados de qualquer tipo. Cada um destes métodos converte a informação fornecida em string e então acrescenta ou insere os caracteres desta string no string buffer. O método append() sempre adiciona os caracteres no final do buffer. O método insert(), por sua vez, adiciona os caracteres em um determinado ponto. Por exemplo, se z se refere a um objeto string buffer cujo conteúdo é "start", então a chamada de método z.append("le") faria com que o string buffer tivesse agora ""startle"", enquanto z.insert(4, "le") alteraria o conteúdo do string buffer para "starlet". Em geral, se sb se refere a uma instância de StringBuffer, então sb.append(x) tem o mesmo efeito que sb.insert(sb.length(), x). Sempre que uma operação ocorre envolvendo uma sequencia de fonte (por exemplo, adicionar ou inserir a partir de uma outra sequencia), esta classe sincroniza somente o string buffer no qual a operação está sendo feita. Todo string buffer possui uma capacidade (capacity). Enquanto o comprimento da sequencia de caracteres contida no string buffer não exceder a capacidade do mesmo, não há necessidade de alocar uma nova matriz interna de buffer. Se o buffer interno for sobrecarregado, ele será automaticamente expandido. A partir do Java 5, esta classe foi suplementada com uma classe equivalente criada para o uso em ambiente de thread única: StringBuilder. A classe StringBuilder deve ser usada em vez de StringBuffer, uma vez que ela suporta as mesmas operações mas é mais rápida por não executar sincronização. |
Java ::: Dicas & Truques ::: Formulários e Janelas |
Java Swing para iniciantes - Como criar seu primeiro aplicativo de interface gráfica em Java SwingQuantidade de visualizações: 80421 vezes |
Um aplicativo de interface gráfica em Java é criado usando-se a classe JFrame, do Java Swing. Objetos desta classe servem como containeres para outros componentes e são as janelas principais dos aplicativos, com título e botões para redimensionar, minimizar, maximizar e fechar. Veja um exemplo de um simples aplicativo de interface gráfica em Java Swing: package arquivodecodigos; import javax.swing.*; public class Estudos extends JFrame{ public Estudos() { super("Minha primeira aplicação GUI"); setSize(350, 250); setVisible(true); } public static void main(String args[]){ Estudos app = new Estudos(); app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } } Este código gera uma janela principal de um aplicativo com 350 pixels de largura e 250 pixels de altura. O título da janela é: "Minha primeira aplicação GUI". Veja o resultado na figura abaixo: ![]() |
C++ ::: STL (Standard Template Library) ::: Vector C++ |
Como retornar uma referência ao último elemento de um vector C++ usando a função back()Quantidade de visualizações: 7144 vezes |
O último elemento de um contêiner STL vector pode ser acessado por meio da função back(). Como esta função é sobrecarregada, temos duas opções:reference back(); const_reference back() const; #include <iostream> #include <vector> using namespace std; int main(int argc, char *argv[]){ // um vector vazio que conterá inteiros vector<int> valores; // vamos inserir três elementos valores.push_back(54); valores.push_back(13); valores.push_back(87); // vamos obter o valor do último elemento do vector // Note que back() pode ser usada dos dois lados // de uma operação de atribuição int valor = valores.back(); cout << "Último elemento: " << valor << endl; // vamos alterar o valor do último elemento valores.back() = 102; // vamos testar o resultado cout << "Último elemento: " << valores.back() << endl; system("PAUSE"); // pausa o programa return EXIT_SUCCESS; } Ao executar este código C++ nós teremos o seguinte resultado: Último elemento: 87 Último elemento: 102 Note que aqui nós usamos: int valor = valores.back(); para guardar o valor do último elemento na variável valor. Poderíamos também usar: int& valor = valores.back(); valor = 102; Agora valor é uma referência direta ao último elemento do vector. Desta forma, qualquer alteração no valor da variável valor afetará também o último elemento do vector. Observe agora o seguinte trecho de código: int valor = valores.back(); // o último elemento é 87 valores.back() = 20; cout << "Último elemento: " << valor << endl; Aqui nós acessamos o valor do último elemento, guardarmos-o na variável valor e atribuímos o valor 20 à valores.back(). Porém, ao imprimirmos a variável valor o seu conteúdo ainda é 87. De fato, o que gostaríamos é que uma alteração em valores.back() afetasse também a variável valor. Assim: int& valor = valores.back(); // o último elemento é 87 valores.back() = 20; cout << "Último elemento: " << valor << endl; Mas, como evitar alterações diretas na variável valor? Podemos declarar valor como uma referência constante, ou seja, usar a segunda versão da função back(), a saber const T&, que retorna uma referência constante. Veja: const int& valor = valores.back(); // o último elemento é 87 valores.back() = 20; valor = 300; // esta linha não compila cout << "Último elemento: " << valor << endl; Agora o efeito que queríamos é alcançado. Alterações em valores.back() afetam a variável valor, mas, não podemos alterar valor diretamente, já que esta variável é uma referência constante agora. |
R ::: Dicas de Estudo e Anotações ::: Variáveis e Constantes |
Como usar a função class() da linguagem R para verificar o tipo de dados de uma variávelQuantidade de visualizações: 1264 vezes |
Na linguagem R nós não precisamos informar o tipo de dados de uma variável no momento de sua declaração e, consequentemente, atribuição de seu valor inicial. No entanto, a linguagem permite que as variáveis, no decorrer da execução do programa, assumam outros tipos de dados. Dessa forma, em várias situações nós podemos precisar verificar qual o tipo de dados armazenado em um variável em um determinado momento, talvez, com o propósito de não assumir riscos durante um cálculo envolvendo inteiros e decimais. A função class() da linguagem R recebe o nome de uma variável e nos informa o seu tipo de dados. Veja um exemplo de seu uso: > x <- 10 [ENTER] > class(x) [ENTER] [1] "numeric" > x <- "Java" [ENTER] > class(x) [ENTER] [1] "character" > x <- TRUE [ENTER] > class(x) [ENTER] [1] "logical" > x <- 5L [ENTER] > class(x) [ENTER] [1] "integer" > Execute estas linhas na janela de comandos do R ou em um script e veja como a variável x assumiu, no decorrer da execução, os tipos numeric, character, logical e integer. |
C ::: Desafios e Lista de Exercícios Resolvidos ::: Arrays e Matrix (Vetores e Matrizes) |
Vetores e Matrizes - Exercícios Resolvidos de C - Declarar um vetor de 10 elementos, usar um laço for para inicializar os elementos e exibí-los na verticalQuantidade de visualizações: 15337 vezes |
Vetores e Matrizes - Exercício Resolvido de C - Declarar um vetor de 10 elementos, usar um laço for para inicializar os elementos e exibí-los na vertical Pergunta/Tarefa: Escreva um programa C que declara um vetor de 10 elementos do tipo int. Em seguida use um laço for para inicializar os elementos com os valores de 1 até 10. Para finalizar exiba os valores dos elementos da matriz na vertical. Seu programa deverá exibir a seguinte saída: 1 2 3 4 5 6 7 8 9 10 Resposta/Solução: A resolução desta tarefa passa pela declaração da matriz. Veja como isso pode ser feito: // vamos declarar uma matriz de 10 ints // neste momento seus elementos terão, todos, // valores aleatórios int valores[10]; Veja a resolução completa do exercício: #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { // vamos declarar uma matriz de 10 ints // neste momento seus elementos terão, todos, // valores aleatórios int valores[10]; int i; // vamos usar o laço for para inicializar seus elementos // com os valores de 1 até 10 for(i = 0; i < 10; i++){ // aqui nós usamos o valor da variável i para acessar o // elemento da matriz e também para atribuir o valor de i + 1 // ao elemento sendo acessado valores[i] = (i + 1); } // só nos resta exibir os valores de todos os elementos for(i = 0; i < 10; i++){ printf("%d\n", valores[i]); } system("PAUSE"); return 0; } |
C++ ::: Desafios e Lista de Exercícios Resolvidos ::: Métodos, Procedimentos e Funções |
Exercício Resolvido de C++ - Escreva um programa que solicite dois números do tipo inteiro distintos ao usuário e que apresente na tela o maior delesQuantidade de visualizações: 616 vezes |
Pergunta/Tarefa: Escreva um programa que solicite dois números do tipo inteiro distintos ao usuário e que apresente na tela o maior deles. Esse programa deve possuir uma função para verificar qual é o maior número. Atenção: seu código deverá assegurar que os dois números informados pelo usuário sejam diferentes. Exiba uma mensagem na tela caso isso acontecer. Sua saída deverá ser parecida com: Informe o primeiro número inteiro: 6 Informe o segundo número inteiro: 3 O maior número é: 6 Veja a resolução comentada deste exercício em C++: #include <string> #include <iostream> using namespace std; // protótipo da função que receberá dois números inteiros // e retornará o maior deles int maior_numero(int num1, int num2); int main(int argc, char *argv[]){ // variáveis usadas na resolução do problema int num1, num2, maior; // vamos pedir para o usuário informar os dois números cout << "Informe o primeiro número inteiro: "; cin >> num1; cout << "Informe o segundo número inteiro: "; cin >> num2; // os números são iguais? if(num1 == num2){ cout << "Erro. Os dois números são iguais.\n" << endl; } else{ // vamos chamar a função para obter o número maior maior = maior_numero(num1, num2); cout << "O maior número é: " << maior << "\n" << endl; } system("PAUSE"); // pausa o programa return EXIT_SUCCESS; } // função que receberá dois números inteiros e retornará // o maior deles int maior_numero(int num1, int num2){ // o primeiro número é maior que o segundo? if(num1 > num2){ return num1; } else{ return num2; } } |
C# ::: Windows Forms ::: Formulários e Janelas |
Como definir a cor de fundo de um formulário C# Windows Forms usando a propriedade BackColorQuantidade de visualizações: 9373 vezes |
A cor de fundo de um formulário Windows Forms pode ser definida em tempo de design ou execução usando-se a propriedade BackColor. Em tempo de design só precisamos clicar no formulário, acionar a janela de propriedades e escolher a cor de fundo desejada. Em tempo de execução, a cor de fundo pode ser definida com um código parecido com: private void button1_Click(object sender, EventArgs e){ // vamos definir a cor de fundo para o formulário this.BackColor = Color.LightSalmon; } É possível obter o valor da propriedade BackColor do formulário da seguinte forma: private void button1_Click(object sender, EventArgs e){ // vamos obter o valor da propriedade BackColor Color corFundo = this.BackColor; // vamos mostrar o resultado MessageBox.Show("A cor de fundo é: " + corFundo.Name); } |
Nossas 20 dicas & truques de programação mais populares |
Java - Como exibir a data e hora atual na linguagem Java usando um objeto Date e seu método toString() Python - Como calcular o limite de uma função usando Python e a biblioteca Sympy - Python para Engenharia C - Como alocar memória para instâncias de uma estrutura (struct) e acessá-las usando ponteiros em C |
Você também poderá gostar das dicas e truques de programação abaixo |
C# - Como excluir todos os itens selecionados em uma ListBox de múltipla seleção do C# Windows Forms |
Nossas 20 dicas & truques de programação mais recentes |
Últimos Projetos e Códigos Fonte Liberados Para Apoiadores do Site |
Python - Como criar o jogo Pedra, Papel, Tesoura em Python - Jogo completo em Python com código comentado |
Últimos Exercícios Resolvidos |
E-Books em PDF |
||||
|
||||
|
||||
Linguagens Mais Populares |
||||
1º lugar: Java |