Caracteres e String em C: mudanças entre as edições
Linha 11: | Linha 11: | ||
<syntaxhighlight lang="c"> | <syntaxhighlight lang="c"> | ||
#include <stdio.h> | #include <stdio.h> | ||
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> | ||
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> | ||
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> | ||
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> | ||
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*/ | ||
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*/ | ||
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> | ||
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> | ||
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> | ||
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> | ||
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
- Implemente a função Strlen
- 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
- ↑ 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)