Aula 17: strings (cadeias de caracteres) |
string
Vamos ver as implicações desta simples definição. |
Ingenuamente poderíamos pensar que atribuir um valor a esta
variável
poderia ser feito com
n = "Benfica";
mas não podemos esquecer que n
é um ponteiro para char (ver aula 15)
e
o lado direito do = não é (é uma constante do tipo
string). A forma de se fazer a atribuição seria atribuir
um valor a cada elemento do array:
n[0] = 'B';
n[1] = 'e';
n[2] = 'n';
n[3] = 'f';
n[4] = 'i';
n[5] = 'c';
n[6] = 'a';
n[7] = '\0';
Do lado esquerdo de cada = está um elemento do array (char)
e do lado direito está uma constante do tipo char. Desta forma
as
atribuições estão correctas. (De notar no caracter
'\0'
no final, que significa fim-da-string.)
No entanto, esta forma de trabalhar não é muito
prática.
Por esta razão, e em geral para facilitar o trabalho com
strings,
existem muitas instruções para ajudar na
manipulação
de strings. Essas instruções estão definidas na
biblioteca
string.h
e quando as queremos utilizar temos que fazer o "include" da biblioteca
no início do programa com
#include <string.h>
strcpy | copia o conteúdo de uma string para outra |
strcat | acrescenta uma string a outra |
strcmp | compara duas strings |
strlen | retorna o comprimento (número de caracteres, excluindo \0) de uma string |
strstr | procura pela posição de uma string numa outra string |
strcpy |
diminuitivo de "string copy". copia o conteúdo de uma string para outra. |
definição da função: int
*strcpy(char
*s1, const char* s2)
copia o conteúdo de s2 para s1. |
É uma função que tem dois
parâmetros, duas
strings (array de char, pointer para char, portanto) s1 e s2,
e copia o conteúdo de
s2 para s1. As alterações
em s1 são permanentes. A função retorna
um
int
que indica o sucesso da operação. Para já podemos
ignorar este resultado, para não complicar mais. Iremos ignorar
também a palavra
const da declaração do segundo
parâmetro. Um exemplo:
char n[10]; strcpy(n, "Benfica"); printf("%s\n", n); resultado Benfica Efectivamente, o que a
função strcpy
está a fazer é copiar os caracteres da string s2 para s1
até que seja encontrado o caracter fim-da-string:
|
strcat |
diminuitivo de "string concatenate". adiciona uma string a outra string |
definição da função: char
*strcat(char *s1, const char *s2)
acrescenta s2 ao final de s1. |
strcmp |
diminuitivo de "string compare". compara duas strings |
definição da
função:
int strcmp(const char *s1, const char *s2)
compara s1 com s2. Se iguais retorna 0, se alfabeticamente s1<s2 retorna um número negativo, ou retorna um número positivo se s1>s2. |
strcpy(n, "Benfica");
strcpy(m, "Sporting");
cmp = strcmp(n, m);
printf("%s\n", n);
if (cmp==0)
printf("strings are
equal");
else
if (cmp>0)
printf("%s
is after %s", n, m);
else
printf("%s
is before %s", n, m);
resultado
Benfica is before Sporting
A função strcmp
poderia
ser implementada com algo semelhante ao que se segue:
// possible implementation of strcmp
while ((*s1==*s2) &&
(*s1!='\0'))
// still equal and not end-of-string?
{
s1++; // move
pointer
s1 one place
s2++; // move
pointer
s2 one place
}
return((int) *s1 - *s2); // return
difference between contents of s1 and s2
strlen |
diminuitivo de "string length". Retorna o número de caracteres da string (sem contar com \0) |
definição da
função:
int strlen(const char *s1)
Retorna o número de caracteres da string s1 (sem contar com \0) |
A função strlen
poderia
ser implementada com algo semelhante a:
cnt=0;
while (*s1 != '\0')
{
cnt++;
s1++;
}
return(cnt);
strstr |
diminuitivo de "string string". Retorna a posição de uma string numa outra string. |
definição da
função:
char *strstr(const char *s1, const char *s2)
Retorna um ponteiro (array de char) para a posição do texto s2 no texto s1. |
Exemplo:
char n[30]; char *p; strcpy(n, "Benfica"); p = strstr(n, "fic");
|
for (i=0; i<3; i++)
printf("%s\n", n[i]);
resultado:
Benfica
Sporting
Porto