Strings em C

Introdução

A línguagem C é considerada de nível médio, ou seja, uma linguagem de programação que se aproxima da linguagem humana, mas que também utiliza explicitamente características de “linguagem de máquina”. As Strings em C não trazem abstrações e facilidades que escondem alguns detalhes como:

  • contagem de caracteres
  • tamanho da variável que armazenará a string
  • caractere de terminação entre outros.

Como é uma string em C?

“Uma string de caracteres em C é apenas uma matriz de caracteres” [1], ou seja, para se conseguir armazenar uma string em C, é preciso declarar um array de char com o tamanho máximo que a sua string pode ter.

char variavel[100];

É importante saber que na string acima, você pode armazenar até 99 caracteres. Mas por que? Em C, um dos espaços string guarda o caractere de terminação que serve também para contar o tamanho da string na matriz de caracteres. “As operações de I/O de strings de caracteres (gets, puts, etc.) são implementadas em <stdio.h> e um conjunto de funções de manipulação de strings de caracteres bastante simples é implementado em <string.h>.” [1]

Ler strings em C

Há mais de uma maneira de se ler strings em C, uma delas é utilizando o comando scanf. Veja algumas características:

  • Lê até o primeiro espaço em branco – Você pode digitar uma frase inteira, porém o que a variável armazenará será a primeira sequência de caracteres até o espaço em branco. Use o scanf quando necessitar armazenar strings sem espaços como: logins, senhas, e-mails, urls etc. Abaixo há um exemplo comum de utilização:
  • Não precisa indicar o “&” antes da variável, como se faz quando queremos ler inteiros, por exemplo,  pois o vetor de caracteres já é um endereço de memória que aponta para a primeira posição. Veja o exemplo. [4].
  • Aceita vários tipos de parâmetros para formatar, delimitar ou restringir a leitura de determinados caracteres.
scanf("%s", texto); //lê uma string
scanf("%d", &valor); //lê um inteiro
scanf("%[A-Z]s", frase); //lê apenas caracteres entre A a Z. Para no primeiro caractere fora desse intervalo
scanf("%[^\n]s", frase); //lê qualquer caractere inclusive espaços (igual ao comando gets();)
scanf("%50[^\n]s", frase);// lê apenas 50 caracteres

strcpy

é usado sempre que se deseja copiar uma string em outra. Esse comando é necessário, pois como as duas strings são arrays de caracteres, cada caractere de uma string é copiada para a outra string. Uma por uma. Trabalho árduo.

strcpy(destino, origem);

strcmp

é usado quando se deseja comparar strings. Aqui, o valor de retorno pode ser:

  • zero (0): caso as duas strings sejam iguais
  • negativo (-1): caso a primeira string seja menor que a segunda
  • positivo (1): caso a primeira string seja maior que a segunda

Esse valor usado na comparação para determinação de maior menor ou igual é o código ASCII do caractere comparado. Esse comando varre toda a string comparando caractere  por caractere.

#include
#include

int main() {
  char s1[100],s2[100];
  gets(s1);
  gets(s2);
  if (strcmp(s1,s2)==0)
    printf("igual\n");
  else if (strcmp(s1,s2)<0)
    printf("s1 menor que s2\n");
  else
    printf("s1 maior que s2\n");
  return 0;
}

strlen

esta função retorna o tamanho da sua string. Ele identifica o tamanho da sua string assim que encontra o caractere de terminação, o “contra-barra zero”.

char nome[] = "Maria da Silva";
int s = strlen (nome);
// s conterá o valor 14

strcat

concatena duas strings, adicionando o conteúdo da segunda ao final da primeira, além do terminador (). Note que a primeira string deve ter espaço suficiente para conter a segunda, para que não ocorra um “estouro de buffer” [2].

char nome[50] = "Maria";
char sobrenome[] = " da Silva";
strcat (nome, sobrenome);
// agora nome contém "Maria da Silva"

Exercícios

[3] possui uma excelente lista de exercícios.

Referências

[1] Marshall Brain. String de Caracteres. <http://informatica.hsw.uol.com.br/programacao-em-c35.htm&gt;

[2] ___. Programar em C/Strings. <http://pt.wikibooks.org/wiki/Programar_em_C/Strings&gt;

[3] Unicamp. Algoritmos e Programação de Computadores. <http://www.ic.unicamp.br/~rodolfo/Cursos/mc102/1s2003/exercicios4.html&gt;

[4] Islene Calciolari Garcia. Manipulação de Strings.  <http://www.ic.unicamp.br/~islene/mc102/aula17/aula17.pdf&gt;

Anúncios

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