LTP I
Strings
Linguagem C
5/8/2020 1
Strings
• String é uma matriz de caracteres com o terminador
nulo, especificado como ‘\0’ que é normalmente
representado por 0. Este terminador na maioria das
vezes é adicionado pelas funções de manipulação de
strings.
• As matrizes de caracteres (strings) devem ter na
declaração um tamanho com um caractere a mais
que o necessário para os dados por causa do
terminador ‘\0’.
Linguagem C
5/8/2020 2
Strings
#include <stdio.h>
#include <conio.c>
void main (void)
{
char nomeAluno[51];
printf(“Digite o nome do aluno =\n”);
gets(nomeAluno);
printf(“nome do aluno lido = %s\n”,nomeAluno);
getch();
}
• A função gets não faz nenhuma verificação de limites da string
a ser lida , o que pode acarretar erros se digitado mais
caracteres que o dimensionado (ver fgets)
Linguagem C
5/8/2020 3
Strings
• Funções de manipulação de strings (include
string.h)
strlen(s1) => retorna o número de
caracteres em s1 até o ‘\0’
tolower(ch) => devolve o minúsculo de ch
toupper(ch) => devolve o maiúsculo de ch
strcpy(s1,s2) => copia s2 em s1
strncpy (s1,s2,qtde) => copia qtde de s2 para s1
strcat(s1,s2) =>concatena s2 no final de s1
Linguagem C
5/8/2020 4
Strings
strncat(s1,s2,qtde) =>concatena qtde de s2 no final
de s1
strcmp(s1,s2) => =0 se s1 = s2; <0 se s1<s2 e
>0 se s1 >s2 (comparação lexicográfica)
strncmp(s1,s2,qtde) => análogo a strcmp, só que
compara qtde caracteres
strrchr(s1,ch)=> retorna um ponteiro para a
primeira ocorrência de ch em s1
strstr(s1,s2) => retorna um ponteiro para a
primeira ocorrência de s2 em s1
Linguagem C
5/8/2020 5
Strings
int strlen(const char *s1)
s1 deve ter o terminador (‘\0’);
devolve a quantidade de caracteres em s1 não incluindo o terminador ‘\0’ ;
char str1[81];
gets(str1);
printf(“comprimento de str1 = %d\n”, strlen (str1));
printf(“comprimento da cadeia ALO e = %d\n”, strlen (“ALO”));
// no caso ➔ comprimento da cadeia ALO e = 3
Linguagem C
5/8/2020 6
Strings
int tolower(int ch)
devolve o minúsculo de ch se ch é caractere maiúsculo, em caso contrário,
devolve o próprio ch.
int toupper(int ch)
devolve o maiúsculo de ch se ch é caractere minúsculo, em caso contrário,
devolve o próprio ch.
char ch;
getch(ch);
printf(“ o minusculo de ch e = %c\n”,tolower(ch));
printf(“ o maiusculo de ch e = %c\n”, toupper(ch));
Linguagem C
5/8/2020 7
Strings
char *strcpy(char *s1,const char *s2)
a função devolve um ponteiro para s1
s2 deve ter o terminador de string (‘\0’)
tamanho de s1 deve ser >= ao de s2
char str1[80], str2[50];
strcpy (str1, “hoje”);
gets(str2);
strcpy(str1,str2);
Linguagem C
5/8/2020 8
Strings
char *strncpy(char *s1,const char *s2,int
qtde)
a função devolve um ponteiro para s1
s2 deve ter o terminador ‘\0’
copia até qtde caracteres de s2 para s1
se s2 tiver menos caracteres que qtde caracteres, acrescenta nulos (‘\0’)
a s1 até qtde
se s2 tiver mais caracteres que qtde caracteres, s1 ficará sem o
terminador ‘\0’
char str1[80], str2[40];
gets(str1);
strncpy(str2,str1,39);
if(strlen(st1) > 39)
str1[39] =‘\0’; // coloca o terminador ‘\0’
Linguagem C
5/8/2020 9
Strings
char *strcat(char *s1,const char *s2)
concatena uma cópia de s2 em s1 e termina s1 com ‘\0’, sobrepondo o
antigo terminador ‘\0’ de s1 (s1 e s2 devem ter o terminador ‘\0’)
a função devolve um ponteiro para s1
tamanho de s1 deve ser >= ao tamanho de s1 (original) mais o de s2
char str1[80], str2[50];
strcpy (str1, “hoje”);
gets(str2);
strcat(str1,str2);
Linguagem C
5/8/2020 10
Strings
char *strncat(char *s1,const char *s2,int
qtde)
concatena qtde caracteres de s2 em s1 e termina s1 com ‘\0’,
sobrepondo o antigo terminador de s1 (s1 deve ter terminador)
a função devolve um ponteiro para s1
tamanho de s1 deve ser >= ao tamanho de s1 (original) mais qtde
char str1[80], str2[50];
unsigned int qtde;
gets(str1); gets(str2);
qtde = 79 - strlen (s1); /* para incluir o ‘\0’*/
strncat(str1,str2,qtde);
Linguagem C
5/8/2020 11
Strings
int strcmp(const char *s1,const char *s2)
compara lexicograficamente s1 s2 e devolve um inteiro como :
0 => s1 é igual a s2
<0 => s1 é menor que s2
>0 => s1 é maior que s2
char str1[50], str2[40];
gets(str1); gets(str2);
printf(“string 1 = %s e string 2 = %s\n”, str1, str2);
if (! strcmp(str1,str2))
printf(“strings são iguais”);
else
printf(“strings são diferentes\n”);
Linguagem C
5/8/2020 12
Strings
int strncmp(const char *s1,const char *s2, int qtde)
compara lexicograficamente s1 e s2 e devolve um inteiro como a strcmp
➔ (0, <0 ou >0)
se existe menos que qtde caracteres em s1 ou s2 a comparação termina
quando o primeiro /0 for encontrado
char str1[50], str2[40];
gets(str1); gets(str2);
printf(“string 1 = %s e string 2 = %s\n”, str1, str2);
if (! strcmp(str1,str2,15))
printf(“os 15 primeiros caracteres das strings são iguais”);
else
printf(“strings são diferentes\n”);
Linguagem C
5/8/2020 13
Strings
char *strstr(const char *s1,const char *s2)
devolve um ponteiro para primeira ocorrência de s2 na string s1 . Se s2
não for encontrada é retornado um ponteiro nulo (NULL);
char str1[80], str2[80];
char *p;
strcpy (str1, “isto e um pequeno teste ”);
strcpy (str2, “um”);
p = strstr(str1,str2);
if (p){
printf(“ %s foi encontrado em %s na posicao %d \n”, str2, str1,p-str1);
printf(“texto apos a string == %s\n”,p); }
um foi encontrado em isto e um pequeno teste na posicao 7
texto apos a string == um pequeno teste
Linguagem C
5/8/2020 14
Strings
#include <stdio.h>
#include <conio.c>
#include <string.h>
void main(void)
{
char str1[80],str2[80];
printf("Digite duas strings\n");
gets (str1); gets (str2);
printf("comprimentos : str1(%d) str2(%d)\n",strlen(str1),strlen(str2));
if (!strcmp(str1,str2)) printf("strings iguais\n");
strcat(str1,str2); printf("str1 + str2 = %s\n",str1);
if (strrchr(str1,'t')) printf("t esta em str1\n");
if (strstr(str1,"tudo")) printf("tudo esta em str1"); getch();
}
Linguagem C
5/8/2020 15
Vetores de String
• Uma matriz de string é criada através de uma matriz
bidimensional.
• O primeiro índice indica o número de strings e o
segundo o comprimento máximo de cada string. Para
acessar uma string especifica-se somente o primeiro
índice.
char str1[20][80];
gets (str1[2]); ====> lê a terceira string da matriz
ou
gets (&str1[2][0]);
Linguagem C
5/8/2020 16
Vetores de String
#include <stdio.h>
#include <conio.c>
#include <string.h>
void main(void)
{
char nome [20][80]; int i, nfunc = 0;
while (1){
printf(" digite o nome do funcionario (%d) \n",nfunc+1);
gets(nome[nfunc]);
if (strlen(nome[nfunc]) == 0) break;
nfunc++ ;
}
clrscr(); printf(" sequencial nome \n");
for (i=0;i<nfunc;i++)
printf("%10d %s\n",i+1,nome[i]);
}
Linguagem C
5/8/2020 17