Aula 14
-------
strings
-------
- O que é? Vector de caracteres terminado com 0 (não com '0'!)
- Um string só com 1 caracter não é um caracter.
- Existe o string vazio...
Exemplo: 'a' 'u' 'l' 'a'
97 117 108 97 0
"aula"
usa 5 bytes
1) experimentar o programa
main(){
int i;
char s[]="aula";
for(i=0;s[i]!=0;i++)
printf("%4d",s[i]);
printf("%4d",s[i]);
}
2) char s[] = char *s (também com inteiros, etc!)
---------------------------------------------------------------
3) Escrever a função
int compr(char s[]) <-- retorna o número de caracteres de s
---------------------------------------------------------------
4) Escrever a função
void maius(char s[]) <-- passa as minúsculas para maiúsculas
Teste com
#define MAX 100
main(){
char st[MAX];
scanf("%s",st);
maius(st);
printf("Depois da conversao: %s\n",st);
}
---------------------------------------------------------------
Nota. Embora os strings definidos com ", como "aulas", sejam
constantes, isto é, não podemos fazer por exemplo
~~~~~~~~~~
char *s="aulas";
s[1]='i';
vamos por vezes usar essa notação nos exemplos...
---------------------------------------------------------------
Nota. Podemos fazer
char s[6]={'a','u','l','a','s, ,0}";
s[1]='i';
printf("%s",s);
ou
char s[6];
s[0]='a';
...
ou
char s[]="aulas";
s[1]='i'; <--
printf("%s",s);
---------------------------------------------------------------
Nota. Na leitura com scanf, formato %s, o parâmetro é s, não &s.
Porquê?
vectores e apontadores
v <--> &v[0]
*v <--> v[0]
v+4 <--> &v[4]
*(v+4) <--> v[4]
etc
O nome de um vector já é um apontador
---------------------------------------------------------------
5) Escreva uma função que duplique as vogais de um string.
void dupli(char s[])
--------------------
Exemplo: vv!abeed. => vv!aabeaead.
As seguintes funções auxiliares podem ser úteis:
int vogal(int c): 1 de c é vogal, 0 caso contrário
void frente(char c[],int i,int n): chega os caracteres de c[] à frente
entre os índices i...n.
012345678 012345678
--------- ---------
Ex c="mbaeiuuh!" -> frente(c,2,10) -> c="mb aeiuuh!"
^
i
Estrutura do main
#define MAX 100
main(){
char s[MAX];
scanf("%s",s);
printf("s = %s\n",s);
dupli(s);
printf("s = %s\n",s);
}
dup.c
---------------------------------------------------------------
6) Escreva uma função que "cole" o string t no fim do string s.
void cola(char s[],char t[]);
-s-- ----t----
exemplo: cola("ai!"," "que lindo");
--- ---------
|
\___ "ai!que lindo"
Teste a função com o programa
void cola(char s[],char t[]){
int i=0, j=0;
while(s[i]) i++;
...
}
#define MAX 30
main(){
char s[MAX], t[MAX];
scanf("%s",s);
scanf("%s",t);
cola(s,t);
printf("s = %s, t = %s\n",s,t);
}
-------------------------------------------------------------------
Nota. Instruções do tipo s[i++]=t[j++];
PC/PI - página reservada - versão 2005.02.08