Linguagem C - Aula 6.2 - Strings: trabalhando com dados de texto em C (2022)

Linguagem C - Aula 6.2 - Strings: trabalhando com dados de texto em C (2022)

Introdução aos Vetores em C

Conceitos Básicos de Vetores

  • O apresentador inicia a discussão sobre vetores, enfatizando sua importância para manipulação robusta de dados em C.
  • É mencionado que os vetores têm um tamanho n, com índices variando de 0 até n - 1, e que a linguagem C não verifica limites em tempo de compilação, o que pode levar a comportamentos imprevisíveis.
  • A inicialização dos vetores é abordada; ao declarar um vetor, suas posições podem ser preenchidas diretamente nas chaves.

Manipulação de Dados com Laços

  • O uso comum de laços (como for) para iterar sobre os elementos do vetor é discutido, permitindo acesso às posições do vetor.
  • Exemplos práticos são apresentados, como somar valores armazenados no vetor e imprimir resultados na tela.

Vetores e Strings: Armazenamento de Texto

Transição para Strings

  • O apresentador introduz o conceito de strings como vetores de caracteres, permitindo o armazenamento de palavras e frases inteiras.
  • É explicado que uma variável do tipo char armazena apenas um único caractere alfanumérico devido à limitação dos 8 bits.

Estrutura das Strings em C

  • A complexidade do trabalho com strings em C é destacada, comparando-a com outras linguagens mais abstratas como Java.
  • A necessidade de entender como os dados são armazenados na memória é enfatizada para manipular corretamente as strings.

Estrutura Interna dos Vetores de Caracteres

Representação na Memória

  • Cada posição do vetor deve conter um caractere distinto da palavra ou frase. Um exemplo visual é fornecido sobre como isso se organiza na memória.
  • O conceito do caractere nulo (0) é introduzido; ele indica o final da string e deve ser incluído no vetor para delimitar corretamente o texto armazenado.

Importância do Caractere Nulo

  • Para armazenar uma string com 10 caracteres, são necessárias 11 posições no vetor devido à inclusão do caractere nulo.

Leitura de Strings em C

Introdução ao Vetor de Caracteres

  • Um vetor de 10 posições é utilizado para armazenar texto, onde a 11ª posição contém um caractere nulo. Isso permite que as dez posições anteriores guardem o texto digitado pelo usuário.
  • O uso do especificador %s no scanf é comum para ler strings, mas tem limitações quando se trata de espaços e frases completas.

Limitações do scanf

  • O scanf pode ler uma string inteira sem precisar acessar letra por letra, mas não consegue lidar com espaços; ele interrompe a leitura ao encontrar um espaço.
  • A leitura via scanf só armazena até o primeiro espaço, ignorando qualquer texto subsequente que o usuário digitar após esse ponto.

Problemas com Tamanho do Vetor

  • Se o usuário tentar inserir um texto maior que o tamanho do vetor (por exemplo, 20 caracteres em um vetor de 10), isso pode causar problemas na leitura e armazenamento dos dados.
  • É importante garantir que a entrada do usuário não exceda o tamanho definido para evitar sobreposição e corrupção de dados.

Sintaxe Aprimorada

  • Uma sintaxe aprimorada permite especificar o tamanho da string a ser lida e incluir espaços. Isso é feito utilizando expressões como %[^n], permitindo capturar toda a linha até o Enter.
  • O uso do acento circunflexo (^) dentro da expressão ajuda a definir quais caracteres devem ser lidos ou ignorados durante a captura da string.

Exemplo Prático

  • Na prática, essa sintaxe parece complexa, mas é simples: define-se o tamanho máximo da string menos um (para incluir o caractere nulo).
  • Ao usar %[^n], todos os caracteres digitados até pressionar Enter são capturados corretamente, incluindo espaços.

Impressão de Strings

  • Para imprimir uma string na tela usando printf, utiliza-se também especificadores de formato como %s.
  • É necessário passar os vetores corretos para serem impressos no console, garantindo que cada variável seja referenciada adequadamente.

Conclusão sobre Uso Prático

  • A compreensão dessas técnicas facilita muito a manipulação de strings em C. Com exemplos práticos, fica mais claro como aplicar essas regras na programação.

Introdução ao Uso de scanf e Boas Práticas

Sintaxe Básica do scanf

  • O uso da função scanf é introduzido, destacando que a variável utilizada é um vetor de caracteres, sem necessidade do operador comercial (&).
  • É recomendado chamar a função fflush(stdin) após o uso do scanf, como uma boa prática para garantir a limpeza do buffer de entrada.

Leitura e Impressão de Dados

  • O usuário pode digitar texto via teclado, que será impresso na tela utilizando o formato %s.
  • A variável %s será substituída pelo conteúdo inserido pelo usuário em tempo de execução.

Comparação entre scanf Convencional e Aprimorado

  • A diferença entre o scanf convencional e o aprimorado é discutida; no aprimorado, é possível especificar o tamanho máximo da leitura.
  • O uso do circunflexo (^) dentro dos colchetes permite ler espaços, limitando a leitura a 10 caracteres.

Limitações e Cuidados com Buffer

  • Ao usar o scanf convencional, se um espaço for digitado, ele interrompe a leitura. Já no aprimorado, todos os 10 caracteres são lidos.
  • É importante reservar um caractere para o terminador nulo (0). Portanto, deve-se ler até n - 1 caracteres para evitar problemas.

Testes com Entrada de Dados

  • Um teste prático mostra que ao tentar ler mais caracteres do que permitido (11 em vez de 10), ocorre uma violação da memória.
  • O método aprimorado garante que o último caractere seja sempre reservado para o terminador nulo automaticamente.

Funções Alternativas para Entrada de Dados

  • A aula menciona outras funções como gets() e suas limitações. A função fgets() é sugerida como uma alternativa mais segura.

Manipulação de Strings em Linguagem C

Função para Limitar o Tamanho da String

  • A função permite que o nome da string seja definido diretamente no parâmetro, facilitando a manipulação sem necessidade de ajustes manuais como "n-1".
  • O uso do STDIN é destacado como entrada padrão, onde a função lê dados do teclado e reserva espaço para o caractere nulo (0) no final da string.

Impressão de Strings

  • A função printf é utilizada para imprimir strings na tela, aceitando apenas argumentos do tipo string, não permitindo outros tipos como inteiro ou float.

Importância do fflush

  • O comando fflush(stdin) é essencial após entradas de dados, especialmente com tipos como float e char, para evitar problemas nas leituras subsequentes.
  • Sem o uso do fflush, pode ocorrer um "lixo" no buffer que interfere nas próximas leituras, resultando em comportamentos inesperados.

Exemplos Práticos

  • Um exemplo prático demonstra a importância de usar fflush. Ao removê-lo, as entradas podem ser puladas ou ignoradas.
  • O teste mostra que ao digitar uma string e não usar fflush, a leitura seguinte falha devido à presença de dados residuais no buffer.

Comportamento das Funções

  • É enfatizado que sempre deve-se utilizar fflush após funções que leem dados para garantir que as próximas leituras funcionem corretamente.

Leitura e Limitação com fgets

  • A função fgets é apresentada como uma alternativa segura para ler strings, mas não controla automaticamente o limite de tamanho do vetor.

Conclusão sobre Funcionalidades em C

  • O programa finaliza mostrando a execução correta das funções com controle adequado sobre as entradas e saídas.

Manipulação de Strings em C

Introdução às Funções de Manipulação de Strings

  • A manipulação de strings em C pode ser trabalhosa, especialmente ao lidar com atribuições e funções específicas. A função strcpy é fundamental para facilitar essa tarefa.
  • Variáveis simples do tipo int podem ser atribuídas diretamente, mas isso não se aplica a strings, que requerem métodos específicos para modificação.

Uso da Função strcpy

  • Para alterar o conteúdo de uma string já declarada, deve-se usar a função strcpy, pois a atribuição direta não é permitida.
  • É importante anotar que strings não podem ser alteradas usando o operador igual; apenas strcpy pode modificar seu conteúdo.

Funcionamento da strcpy

  • A sintaxe da função strcpy envolve especificar um destino e uma origem: strcpy(destino, origem);.
  • O conteúdo da string origem pode ser uma string literal ou outra variável do tipo string.

Exemplo Prático com strcat

  • Para concatenar duas strings (por exemplo, nome e sobrenome), utiliza-se a função strcat, que combina as duas strings na string de destino.
  • O resultado da concatenação armazena o nome completo na variável designada como destino.

Comparação de Strings com strcmp

  • A função strcmp compara duas strings e retorna zero se forem idênticas. Isso permite verificar igualdade entre elas dentro de estruturas condicionais.
  • Se as strings forem diferentes, strcmp retornará um valor diferente de zero, indicando que elas não são iguais.

Importância da Biblioteca locale.h

  • A inclusão da biblioteca locale.h é crucial para permitir o uso correto de acentos em programas C.
  • Ao configurar a localidade para português (setlocale(LC_ALL, "pt_BR");), os caracteres acentuados serão exibidos corretamente nas saídas do programa.

Exemplos Práticos e Configurações Necessárias

  • Antes de utilizar funções como strcpy, é necessário incluir as bibliotecas apropriadas no início do código (#include <string.h>).
  • Definir constantes para tamanhos das strings facilita a manutenção do código. Por exemplo, definir uma constante N = 20 controla o tamanho das variáveis string utilizadas no programa.

Demonstração do Uso das Funções

  • Um exemplo prático mostra como copiar o conteúdo "Olá Mundo" para uma nova variável utilizando strcpy, demonstrando claramente a diferença entre atribuição direta e uso adequado dessa função.

Manipulação de Strings em C

Introdução à Impressão e Destino de Strings

  • O apresentador imprime "Olá Mundo" e menciona que o conteúdo de destino é um lixo de memória, indicando a importância da inicialização correta das variáveis.
  • É destacado que para alterar conteúdos de strings, a função strcpy deve ser utilizada, enfatizando sua relevância na manipulação de strings.

Concatenando Strings com strcat

  • O exemplo mostra como usar strcat para concatenar duas strings: S1 (lógica) e S2 (programação), demonstrando a junção dos conteúdos.
  • Após a concatenação, o conteúdo da string S1 agora contém tanto "lógica" quanto "programação", ilustrando o funcionamento do strcat.

Leitura e Tamanho Dinâmico de Strings

  • O apresentador utiliza fgets para ler uma string do usuário sem limitar o número de caracteres, destacando a flexibilidade dessa abordagem.
  • A função strlen é usada para contar quantos caracteres foram digitados pelo usuário, mostrando como gerenciar entradas dinâmicas.

Iteração sobre Caracteres em uma String

  • Um loop é implementado para imprimir cada caractere individualmente da string lida, utilizando um índice que percorre toda a extensão da string.
  • O apresentador demonstra que mesmo ao modificar o método de impressão, os resultados permanecem consistentes.

Comparação entre Strings

  • Uma nova string chamada "hard text" é introduzida com um comando específico. O objetivo é comparar essa string com uma entrada do usuário.
  • A comparação entre as strings é realizada usando strcmp, onde se verifica se as duas strings são iguais ou não.

Introdução às Strings em C

Estrutura e Armazenamento de Strings

  • As strings são representadas como vetores, onde cada posição armazena um caractere alfanumérico. O caractere nulo (0) é utilizado para indicar o final da string.

Funções de Entrada e Saída

  • A função scanf tem limitações ao lidar com strings, pois não admite espaços e pode causar problemas se a leitura extrapolar o tamanho do vetor. Para contornar isso, podemos usar especificadores de formato mais rigorosos.
  • Outras funções como gets e fgets permitem a leitura de strings, sendo que fgets é preferível por limitar o número de caracteres lidos, evitando estouros de buffer.

Melhores Práticas na Leitura de Dados

  • A função fgets é recomendada para armazenar dados limitando o número máximo de caracteres, além de reservar espaço para o caractere nulo no final da string.
  • É uma boa prática utilizar fflush(stdin) após leituras para limpar o buffer do teclado e evitar erros nas próximas entradas.

Manipulação de Strings

  • Funções como strcpy, strcat, e strcmp são essenciais na manipulação de strings em C. O uso correto dessas funções permite copiar, concatenar e comparar strings eficientemente.
  • Lembrar que atribuições diretas entre strings não são permitidas; deve-se sempre usar funções específicas para manipular conteúdo entre elas.

Conclusão

Video description

👨🏻‍💻 QUER TER ACESSO ÀS LISTAS DE EXERCÍCIOS E SLIDES DA AULA ⁉️ 👇🏻👇🏻👇🏻👇🏻👇🏻👇🏻👇🏻👇🏻👇🏻👇🏻 ⚠️ADQUIRA A LISTA DE EXERCÍCIOS através deste link: 👉🏻 https://profpietro.com/curso-exercicios-c/ Neste link você ainda terá direito de: ✅ Garantir acesso vitalício a este curso de Linguagem C, dentro da minha plataforma de hospedagem de cursos; ✅ Ter acesso aos exercícios resolvidos; ✅ Ter acesso aos slides utilizados nas aulas; ✅ Emissão do seu certificado de conclusão do curso para comprovar que realizou e teve o aproveitamento necessário no curso. Está com muita dificuldade em programação? MARQUE UMA AULA PARTICULAR COMIGO: 🎯contato@profpietro.com Estou no Linked-in: https://www.linkedin.com/in/profpietromartins Estou no GitHub: https://github.com/pietromartinso/ Estou no Instagram: https://www.instagram.com/profpietromartins/