Cadeia de caracteres (ou string)
0
0

Cadeia de caracteres (ou string)

A declaração de uma string em C é semelhante a declaração de um vetor do tipo char. O número máximo de caracteres que comportará a cadeia será igual ao número de elementos do vetor menos um (reservado para o caractere do final da cadeia),...

Grey
3 min
0
0
  • Uma cadeia de caracteres (string em inglês) é uma sequência de caracteres ou símbolos definida pelo código ASCII.
  • Em linguagem C, uma cadeia de caracteres pode ser tratada como um "Vetor" do tipo char, cujo último elemento é o caractere nulo '\0', ou seja, o primeiro caractere do código ASCII (cujo valor é 0).
  • O caractere nulo é um caractere de controle (ou seja, não exibível) que indica o fim de uma cadeia de caracteres. Assim, uma cadeia composta de n elementos será, na realidade, um vetor de n + 1 elementos do tipo char.
  • Podemos, por exemplo, representar a string "Ola Mundo!" da seguinte maneira:
Email image

Declaração de Cadeias de caracteres

A declaração de uma string em C é semelhante a declaração de um vetor do tipo char. O número máximo de caracteres que comportará a cadeia será igual ao número de elementos do vetor menos um (reservado para o caractere do final da cadeia), por exemplo, se definirmos uma cadeia de caracteres de tamanho 30, ela conterá 29 caracteres + '\0'.

char Nome_da_tabela[Número_de_elementos]

Inicialização de cadeia de caracteres

  • A inicialização de uma string, ou seja, mover caracteres, pode ser feita de duas maneiras: Mover manualmente os dados (célula por célula), como em um vetor ouUtilizar funções de manipulação de cadeias fornecidas pela biblioteca padrão (String.h).
  • Mover manualmente os dados (célula por célula), como em um vetor ou
  • Utilizar funções de manipulação de cadeias fornecidas pela biblioteca padrão (String.h).

Exemplo de inicialização manual de cadeia de caracteres (para impressão de cadeia de caracteres com o comando printf devemos utilizar o caracter formatação "%s" :

#include <stdio.h>
int main(){
char Cadeia[12];
Cadeia[0]= 'L';
Cadeia[1]= 'i';
Cadeia[2]= 'n';
Cadeia[3]= 'g';
Cadeia[4]= 'u';
Cadeia[5]= 'a';
Cadeia[6]= 'g';
Cadeia[7]= 'e';
Cadeia[8]= 'm';
Cadeia[9]= ' ';
Cadeia[10]= 'C';
Cadeia[11]= '\0';
printf("%s",Cadeia);
}

Outra maneira (mais simples) de inicializarmos uma cadeia de caracteres é na sua declaração, como no exmplo abaixo:

#include <stdio.h>
int main(){
char Cadeia[12] = {'L', 'i', 'n', 'g', 'u', 'a', 'g', 'e', 'm', ' ', 'C', '\0'};
printf("%s",Cadeia);
}

ATENÇÃO

O comando scanf não lê o caracter Enter('\0'), portanto em variáveis do tipo char esse caracter é lido no comando scanf seguinte. Logo, em comandos de leitura de variáveis do tipo char, coloque a função getchar() ou fflush(stdin) (biblioteca stdlib.h) após o commando scanf, para solucionar o problema. A função fflush(stdin) limpa o buffer do teclado. Veja o exemplo abaixo:

#include<stdio.h>
#include<stdlib.h>
int main(){
char vet[10];
int i;
for (i=0; i<10;i++){
printf("\nentra:");
scanf("%c",&vet[i]);
fflush(stdin); //Usar essa função ou a função getchar()
}
for (i=0; i<10;i++){
printf("\nvet=:%c", vet[i]);
}
}

Utilizar funções de manipulação de cadeias fornecidas na biblioteca padrão (String.h)

A movimentação de valores de/para as cadeias de caracteres não pode ser efetuadas diretamente pelo comando de atribuição, ou pode ser efetuada pela movimentação caracter a caracter como em vetores ou através de funções de manipulação de cadeias de caracteres. Estas funções estão no cabeçalho do arquivo <string.h>:

#include <string.h>

Nesse momento, apresentaremos apenas as funções mais importantes de manipulação de Strings.

  • Mover caracteres para uma variável string.

A movimentação pode ser efetuada caracter a caracter (como em um vetor) ou através da função strcpy (string copy).

char *strcpy (const char *dest,const char *src) - Copia uma string de src para outra string dest.

Exemplo de movimentação manual e através da função strcpy.

#include<string.h>
#include<stdio.h>
int main() {
char origem[16] = {'T', 'E', 'S','T','E',' ', 'D','E', ' ', 'S','T','R','I','N','G','\0'};
char destino[16];
int i;
for (i= 0; i < 16; i++) {
destino[i] = origem[i];
}
printf("\nManual\nOrigem = %s\n\nDestino = %s", origem, destino);
strcpy(destino, origem);
printf("\n\nCom Funcao\nOrigem = %s\n\nDestino = %s", origem, destino);
}
  • Comparação de Strings.

A comparação pode ser efetuada caracter a caracter (como em um vetor) ou através da função strcmp (string compare).

int strcmp(const char *string1,const char *string2) - Compara duas strings (string1 e string2) e determina a ordem (alfabetica) das duas.

Usamos os códigos dos caracteres para determinar precedência
Retorno:
Se s1 preceder s2 -> -1
Se s2 preceder s1 -> 1
Se s1 igual a s2 -> 0

Exemplo de comparação manual e através da função strcmp.

#include<string.h>
#include<stdio.h>
int compara(char s1[],char s2[]) {
int i;
for (i=0; s1[i] != '\0' && s2[i] != '\0'; i++) { // teste do for fica falso quando uma das strings chegar ao fim, ou pelo return
if (s1[i] < s2[i])
return -1;
else
if (s1[i] > s2[i])
return 1;
}
//strings iguais
return 0;
}
int main() {
char str1[16] = {'T', 'E', 'S','T','E',' ', 'D','E', ' ', 'S','T','R','I','N','G','\0'};
char str2[16] = {'S', 'T', 'R','I','N','G', ' ', 'D','E', ' ', 'T','E','S','T','E','\0'};
char str3[16] = {'T', 'E', 'S','T','E',' ', 'D','E', ' ', 'S','T','R','I','N','G','\0'};
int retorno;
int i;
retorno = compara(str1,str2);
printf("\n\nretorno= %d", retorno);
if (retorno == 1)
printf("\nstr1 > str2");
else
if (retorno == -1)
printf("\nstr1 < str2");
else
printf("\nstr1 = str2");
retorno=strcmp(str1, str3);
printf("\n\nretorno= %d", retorno);
}
  • Tamanho da cadeia de caracteres

Informa a quantidade de caracteres (tamanho) em uma cadeia de caracteres, excetuando o caracter de fim da string('\0').

int strlen(const char *string) - Retorna o tamanho de uma string.

Exemplo de Tamanho de String.

#include<string.h>
#include<stdio.h>
int main() {
char str1[] = {'Q', 'U', 'A','L',' ','E', 'O', ' ','M','E','U',' ','T','A','M','A','N','H','O','\0'};
char str2[] = {'E',' ','A',' ', 'M','I','N','H','A', ' ','S', 'T', 'R','I','N','G','\0'};
char str3[] = {'T', 'E', 'S','T','E',' ', 'D','E', ' ', 'S','T','R','I','N','G','\0'};
int tam1, tam2, tam3;
tam1 = strlen(str1);
printf("\n\nTamanho da String 1= %d", tam1);
tam2 = strlen(str2);
printf("\n\nTamanho da String 2= %d", tam2);
tam3 = strlen(str3);
printf("\n\nTamanho da String 3= %d", tam3);
}
  • União (Concatenção) da cadeia de caracteres

Concatena (une) caracteres de duas cadeias de caracteres em uma string.

char *strcat(const char *string1, char *string2) - Concatena os caracteres da string2 na string1.

Exemplo de Concatenação de Strings.

#include<string.h>
#include<stdio.h>
int main() {
char str1[22] = {'Q', 'U', 'A', 'L',' ','E',' ','\0'};
char str2[15] = {'A',' ', 'M','I','N','H','A', ' ','S', 'T', 'R','I','N','G','\0'};
printf("\n\nString 1= %s\n\nString2 =%s", str1,str2);
strcat(str1,str2);
printf("\n\nNova String 1= %s", str1);
}