Caracteres e String em C: mudanças entre as edições

De Wiki Cursos IFPR Foz
Ir para navegaçãoIr para pesquisar
Linha 11: Linha 11:
<syntaxhighlight lang="c">
<syntaxhighlight lang="c">
  #include <stdio.h>
  #include <stdio.h>
  void main ()
  int main ()
  {
  {
   char Ch;
   char Ch;
Linha 17: Linha 17:
   Ch = getchar();
   Ch = getchar();
   printf ("Voce pressionou a tecla %c\n",Ch);
   printf ("Voce pressionou a tecla %c\n",Ch);
  return (0);
  }
  }
</syntaxhighlight>
</syntaxhighlight>
Linha 22: Linha 23:
<syntaxhighlight lang="c">
<syntaxhighlight lang="c">
  #include <stdio.h>
  #include <stdio.h>
  void main ()
  int main ()
  {
  {
     char Ch;
     char Ch;
Linha 28: Linha 29:
     Ch = getchar();
     Ch = getchar();
     printf ("O código ASCCI da tecla pressionada é %d\n",Ch);
     printf ("O código ASCCI da tecla pressionada é %d\n",Ch);
    return (0);
  }
  }
</syntaxhighlight>
</syntaxhighlight>
Linha 49: Linha 51:
<syntaxhighlight lang="c">
<syntaxhighlight lang="c">
  #include <stdio.h>
  #include <stdio.h>
  void main ()
  int main ()
  {
  {
     char string[100];
     char string[100];
Linha 55: Linha 57:
     gets (string);
     gets (string);
     printf ("Voce digitou %s\n",string);
     printf ("Voce digitou %s\n",string);
    return (0);
  }
  }
</syntaxhighlight>
</syntaxhighlight>
Linha 66: Linha 69:
<syntaxhighlight lang="c">
<syntaxhighlight lang="c">
  #include <stdio.h>
  #include <stdio.h>
  void main ()
  int main ()
  {
  {
   char string[100];
   char string[100];
Linha 74: Linha 77:
   for (i=0; string[i] != '\0'; i++)
   for (i=0; string[i] != '\0'; i++)
     printf ("Caractere %d: %c\n", i, string[i]);
     printf ("Caractere %d: %c\n", i, string[i]);
  return (0);
  }
  }
</syntaxhighlight>
</syntaxhighlight>
Linha 82: Linha 86:
<syntaxhighlight lang="c">
<syntaxhighlight lang="c">
  #include <stdio.h>
  #include <stdio.h>
  void main ()
  int main ()
  {
  {
   char string1[100], string2[100];
   char string1[100], string2[100];
Linha 92: Linha 96:
   string2[i]='\0';
   string2[i]='\0';
   printf ("String copiada: %s\n", string2);
   printf ("String copiada: %s\n", string2);
  return (0);
  }
  }
</syntaxhighlight>
</syntaxhighlight>
Linha 104: Linha 109:
  #include <stdio.h>
  #include <stdio.h>
  int Strlen(char string[]);      /*Protótipo da função*/
  int Strlen(char string[]);      /*Protótipo da função*/
  void main ()                    /*Programa principal para teste*/
  int main ()                    /*Programa principal para teste*/
  {
  {
   char c[50]="Brasil2014";
   char c[50]="Brasil2014";
Linha 110: Linha 115:
   len = Strlen(c);
   len = Strlen(c);
   printf("Comprimento da string: %d\n", len);
   printf("Comprimento da string: %d\n", len);
  return (0);
  }
  }
  int Strlen(char string[])      /*Definição da função*/
  int Strlen(char string[])      /*Definição da função*/
Linha 127: Linha 133:
#include <stdio.h>
#include <stdio.h>
void Strcat(char s1[], char s2[]);      /*Protótipo da função*/
void Strcat(char s1[], char s2[]);      /*Protótipo da função*/
void main ()                            /*Programa principal para teste*/
int main ()                            /*Programa principal para teste*/
{
{
   char string1[20]="Brasil",string2[20]="2014";
   char string1[20]="Brasil",string2[20]="2014";
   Strcat(string1, string2);
   Strcat(string1, string2);
   printf("Strings concatenadas: %s\n", string1);
   printf("Strings concatenadas: %s\n", string1);
  return (0);
}
}
void Strcat(char s1[], char s2[])        /*Definição da função*/
void Strcat(char s1[], char s2[])        /*Definição da função*/
Linha 158: Linha 165:
#include <stdio.h>
#include <stdio.h>
#include <string.h>
#include <string.h>
void main ()
int main ()
{
{
   char c[50];
   char c[50];
Linha 166: Linha 173:
   len = strlen(c);
   len = strlen(c);
   printf("Seu nome tem %d caracteres.\n", len);
   printf("Seu nome tem %d caracteres.\n", len);
  return (0);
}
}
</syntaxhighlight>
</syntaxhighlight>
Linha 173: Linha 181:
#include <stdio.h>
#include <stdio.h>
#include <string.h>
#include <string.h>
void main ()
int main ()
{
{
   char str[10] = "Brasil";
   char str[10] = "Brasil";
   strcat(str, "2014");
   strcat(str, "2014");
   printf("Copa do Mundo %s\n", str);
   printf("Copa do Mundo %s\n", str);
  return (0);
}
}
</syntaxhighlight>
</syntaxhighlight>
Linha 188: Linha 197:
#include <stdio.h>
#include <stdio.h>
#include <string.h>
#include <string.h>
void main(void)
int main()
{
{
   char palavra1[100], palavra2[100];
   char palavra1[100], palavra2[100];
Linha 203: Linha 212:
   else
   else
     printf("A segunda palavra vem antes no dicionário\n");
     printf("A segunda palavra vem antes no dicionário\n");
  return (0);
}
}
</syntaxhighlight>
</syntaxhighlight>
Linha 210: Linha 220:
#include <stdio.h>
#include <stdio.h>
#include <string.h>
#include <string.h>
void main ()
int main ()
{
{
   char str1[10] = "Brasil";
   char str1[10] = "Brasil";
Linha 217: Linha 227:
   str2[7] = '\0';
   str2[7] = '\0';
   printf("str2 = %s\n", str2);
   printf("str2 = %s\n", str2);
  return (0);
}
}
</syntaxhighlight>
</syntaxhighlight>

Edição das 14h28min de 13 de agosto de 2014

Caracteres e String em C

Caracteres

Os caracteres em C são do tipo de dados char e são variáveis de um Byte.

Cada caractere é armazenado no Byte em formato ASCII.

Se armazenarmos um dígito numérico como um char, o conteúdo do char será o código ASCII correspondente ao número, por exemplo:

Dígito: 1 -> ASCII: 00110001
Função para ler e imprimir um caractere digitado
 #include <stdio.h>
 int main ()
 {
   char Ch;
   printf("Digite uma tecla\n");
   Ch = getchar();
   printf ("Voce pressionou a tecla %c\n",Ch);
   return (0); 
 }
Função que imprime código ASCII de um caractere
Como um char armazena um inteiro, se utilizarmos %d na função printf ela irá imprimir o inteiro correspondente ao código ASCII do caractere.
 #include <stdio.h>
 int main ()
 {
    char Ch;
    printf("Digite uma tecla\n");
    Ch = getchar();
    printf ("O código ASCCI da tecla pressionada é %d\n",Ch);
    return (0); 
 }

Strings

As strings em C são vetores de caracteres terminado com um caractere nulo (\0).

O caracter nulo (\0) corresponde ao código ASCII: 00000000.

Como as strings são vetores de caracteres, podemos acessar cada caracter de uma string usando indexação de vetores, no qual o primeiro caractere é indexado por 0, o segundo por 1, e assim por diante.

Uma constante string é indicada por um conjunto de caracteres entre aspas. Por exemplo, a string "Brasil" tem 7 elementos, incluindo as letras da palavra e o caractere \0:

0 1 2 3 4 5 6
B r a s i l \0
Função que lê e imprime uma string digitada
 #include <stdio.h>
 int main ()
 {
    char string[100];
    printf ("Digite uma string: ");
    gets (string);
    printf ("Voce digitou %s\n",string);
    return (0); 
 }
Observação:
  • gets: Lê entrada até "nova linha" (LF) e substitui por '\0' (NULL). Não checa possibilidade de estouro do buffer, por isto seu uso não é recomendado.
Alternativa:
  • fgets: Lê entrada até "nova linha" (LF) e acrescenta ao final '\0' (NULL).
fgets(string, sizeof(string), stdin);
Função que percorre o vetor string e imprime cada caractere
 #include <stdio.h>
 int main ()
 {
   char string[100];
   int i;
   printf ("Digite uma string: ");
   gets (string);
   for (i=0; string[i] != '\0'; i++)
     printf ("Caractere %d: %c\n", i, string[i]);
   return (0); 
 }
Exercício
Construir uma função para copiar uma string (string1[100]) em outra (string2[100]).

Resolução:

 #include <stdio.h>
 int main ()
 {
   char string1[100], string2[100];
   int i;
   printf ("Digite uma string: ");
   gets (string1);
   for (i=0; string1[i] != '\0'; i++)
     string2[i]=string1[i];
   string2[i]='\0';
   printf ("String copiada: %s\n", string2);
   return (0); 
 }

Operações sobre Strings

Funções que implementam operações primitivas sobre strings, conforme apresentado em [1].

Strlen
Função para encontrar o tamanho de uma string
Strcat
Função para concatenar duas strings
A função Strcat recebe duas strings como parâmetros e concatenada a segunda string na primeira.
Exercícios
  1. Implemente a função Strlen
  2. Implemente a função Strcat

Biblioteca <string.h>

A biblioteca string.h da linguagem C apresenta uma série de funções para manipular strings. Para utilizar estas funções deve-se incluir no início do programa a linha:

#include <string.h>
Função strlen()
Recebe como argumento uma string e retorna um inteiro que é o comprimento do string.
#include <stdio.h>
#include <string.h>
int main ()
{
  char c[50];
  int len;
  printf("Entre seu nome: ");
  gets(c);
  len = strlen(c);
  printf("Seu nome tem %d caracteres.\n", len);
  return (0); 
}
Função strcat()
Recebe como argumento duas strings e as comcatena.
#include <stdio.h>
#include <string.h>
int main ()
{
   char str[10] = "Brasil";
   strcat(str, "2014");
   printf("Copa do Mundo %s\n", str);
   return (0); 
}
Função strcmp()
Recebe como argumento duas strings e as compara, retornando um inteiro:
  • Se string1 = string2 -> retorna 0;
  • Se string1 < string2 (vem antes no dicionário) -> retorna inteiro negativo (< 0);
  • Se string1 > string2 (vem depois no dicionário) -> retorna inteiro positivo (> 0).
#include <stdio.h>
#include <string.h>
int main()
{
  char palavra1[100], palavra2[100];
  int  resultado;
  printf("Entre com uma palavra: ");
  gets(palavra1);
  printf("Entre outra palavra: ");
  gets(palavra2);
  resultado = strcmp(palavra1, palavra2);
  if (resultado == 0)
    printf("Palavras iguais\n");
  else if (resultado < 0)
    printf("A primeira palavra vem antes no dicionário\n");
  else
    printf("A segunda palavra vem antes no dicionário\n");
  return (0); 
}
Função strcpy()
Copia uma string em outra.
#include <stdio.h>
#include <string.h>
int main ()
{
   char str1[10] = "Brasil";
   char str2[10];
   strncpy(str2, str1, 6);
   str2[7] = '\0';
   printf("str2 = %s\n", str2);
   return (0); 
}

Referências

  1. TENENBAUM, Aaron M.; LANGSAM, Yedidyah; AUGENSTEIN, Moshe. Estruturas de dados usando C. Makron Books, 1995.

--Evandro.cantu (discussão) 10h29min de 12 de junho de 2014 (BRT)