Cadeias de carateres

char text[100];  // 100 carateres máximo
#define MAX_SIZE  100
...
char text[MAX_SIZE];

Cadeias de carateres

Inicialização de cadeias

char text[6] = { 'H','e','l','l','o','\0' };
char text[6] = "Hello";

Inicialização (cont.)

char text[100] = "Hello";
  // os carateres restantes são '\0'
char text[] = "Hello";  // tamanho 6

Imprimir cadeias

Para imprimir uma cadeia podemos usar:

#include <stdio.h>

char text[] = "Hello, world";
puts(text);

Alternativa:

printf("%s\n", text);

Ler cadeias

Podemos usar fgets() para ler cadeias de carateres.

#include <stdio.h>
#define MAX_SIZE   100
...
char text[MAX_SIZE];
fgets(text, MAX_SIZE, stdin);

Processar cadeias de carateres

Vamos definir pequenas funções para processar cadeias de carateres.

Exemplo 1: contar o comprimento

  unsigned comprimento(char str[]);
   size_t strlen(char str[]);

Contar comprimento

unsigned comprimento(char str[])
{
   unsigned i = 0;

   while(str[i] != '\0')
      i++;

   return i;
}

Exemplo 2: contar espaços

  unsigned contar_espacos(char str[]);

Contar espaços

unsigned contar_espacos(char str[])
{
    unsigned espacos = 0;

    for(int i=0; str[i]!='\0'; i++)
    {
       if(str[i] == ' ')
         espacos ++;
    }
    return espacos;
}

Exemplo 3: inverter uma cadeia

  void inverter(char str[]);

Algoritmo

Cuidados:

Inverter uma cadeia

void inverter(char str[])
{
   int i = 0, j;
   j = comprimento(str) - 1; 
     // atenção: j pode ser negativo!
   while (i < j) {
      char ch = str[i];
      str[i] = str[j];
      str[j] = ch;
      i ++;
      j --;
   }
}

Programa principal

#include <stdio.h>

#define MAX_SIZE 1000    // tamanho máximo

int main(void) {
  char text[MAX_SIZE];
  
  fgets(text, MAX_SIZE, stdin);  // ler 
  puts(text);      // imprimir original
  inverter(text);  // inverter
  puts(text);      // imprimir invertido
}