Aula 15Aulas teóricas - notas...Aula 13Aula 14

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

Aula 15Aulas teóricas - notas...Aula 13Aula 14