770 likes | 892 Views
Capítulo VI – Variáveis Indexadas. 6.1 – A necessidade de variáveis indexadas 6.2 – Vetores e matrizes 6.3 – Aplicações com vetores numéricos 6.4 – Aplicações com matrizes numéricas 6.5 – Cadeias de caracteres 6.6 – Aplicações com vetores de cadeias de caracteres.
E N D
Capítulo VI – Variáveis Indexadas 6.1 – A necessidade de variáveis indexadas 6.2 – Vetores e matrizes 6.3 – Aplicações com vetores numéricos 6.4 – Aplicações com matrizes numéricas 6.5 – Cadeias de caracteres 6.6 – Aplicações com vetores de cadeias de caracteres
6.4 – Aplicações com Matrizes Numéricas 6.4.1 – Transformar uma matriz quadrada em sua transposta • Matriz transposta de uma matriz quadrada é aquela cujas linhas são as colunas da matriz original e cujas colunas são as linhas da mesma
0 0 1 1 2 2 3 3 4 4 0 0 1 11 3 1 12 8 2 6 13 13 11 3 4 16 18 14 21 23 15 5 1 1 A 16 21 6 2 4 5 9 22 7 7 17 10 14 15 18 8 12 23 19 19 24 20 17 9 24 25 25 10 22 20 2 2 Exemplo: • Se o objetivo fosse apenas obter o resultado na tela: for (i = 0; i < n; i++) { for (j = 0; i < n; j++) printf (“%5d”, A[j][i]); printf (“\n”); } • Mas deseja-se transformar a original na transposta 3 3 4 4 Matriz quadrada 5 x 5 original Matriz transposta da original Escrevendo cada coluna numa linha da tela
0 1 2 3 4 Operação básica para a transformação: Trocar A[i][j] com A[j][i] Exemplo: se i = 2 e j = 3, Trocar A[2][3] com A[3][2] 0 11 1 2 12 13 3 14 4 5 15 1 21 6 16 17 7 22 18 8 23 24 19 9 20 25 10 2 3 A 4
0 1 2 3 4 Operação básica para a transformação: Trocar A[i][j] com A[j][i] Exemplo: se i = 2 e j = 3, Trocar A[2][3] com A[3][2] 0 11 1 12 2 13 3 14 4 15 5 1 6 16 21 22 17 7 23 18 8 9 24 19 20 10 25 2 3 A 4 aux 14
0 1 2 3 4 Operação básica para a transformação: Trocar A[i][j] com A[j][i] Exemplo: se i = 2 e j = 3, Trocar A[2][3] com A[3][2] 0 11 1 12 2 13 3 18 4 15 5 1 6 16 21 22 17 7 23 18 8 9 24 19 20 10 25 2 3 A 4 aux 14
0 1 2 3 4 Operação básica para a transformação: Trocar A[i][j] com A[j][i] Exemplo: se i = 2 e j = 3, Trocar A[2][3] com A[3][2] 0 11 1 12 2 13 3 18 4 15 5 1 6 16 21 22 17 7 23 14 8 9 24 19 20 10 25 2 3 A 4 Trocar (A[i][j], A[j][i]): aux = A[i][j]; A[i][j] = A[j][i]; A[j][i] = aux; aux 14
0 1 2 3 4 Para transformar toda a matriz: Percorrê-la com 2 cursores ‘i’ e ‘j’ e Trocar (A[i][j], A[j][i]) O percurso não pode abranger toda a matriz!!! Porquê??? 0 11 1 12 2 13 3 14 4 15 5 1 6 16 21 22 17 7 23 18 8 9 24 19 20 10 25 2 A 3 4 Sejam os comandos: for (i = 0; i < n; i++) for (j = 0; j < n; j++) Trocar (A[i][j], A[j][i]); que percorrem toda a matriz Quando (i, j) = (1, 3) Trocar (A[1][3], A[3][1]) Mais adiante, quando (i, j) = (3, 1) Trocar (A[3][1], A[1][3]) A troca anterior é desfeita
0 1 2 3 4 Deve-se planejar o percurso de ‘i’ e de ‘j’ Para começar, a diagonal principal não precisa ser percorrida A parte acima dessa diagonal deve ser trocada com a parte abaixo dela 0 11 1 2 12 13 3 14 4 5 15 1 21 6 16 17 7 22 18 8 23 24 19 9 20 25 10 2 A 3 4
0 1 2 3 4 Variação de j 0 11 1 2 12 13 3 4 14 5 15 i vai de 0 até n-2 j vai de i+1 até n-1 1 16 6 21 22 7 17 8 23 18 19 24 9 20 25 10 Variação de i 2 A 3 4 Os comandos: for (i = 0; i <= n-2; i++) for (j = i+1; j <= n-1; j++) Trocar (A[i][j], A[j][i]); percorrem a parte acima da diagonal principal e fazem a troca desejada A seguir um programa completo
0 1 2 3 4 0 2 3 4 5 14 15 1 11 12 13 1 8 9 10 20 16 6 21 22 17 7 18 23 24 19 25 2 #include <stdio.h> #include <stdlib.h> int main () { int A[10][10], i, j, n, aux; /* Leitura e escrita da matriz */ printf ("Dimensao da matriz quadrada: "); scanf ("%d",&n); printf ("\nElementos da matriz: \n"); for (i = 0; i <= n-1; i++) for (j = 0; j <= n-1; j++) scanf ("%d", &A[i][j]); printf ("\nMatriz original:\n\n"); for (i = 0; i <= n-1; i++) { for (j = 0; j <= n-1; j++) printf ("%5d", A[i][j]); printf ("\n"); } A 3 4
0 1 2 3 4 0 1 11 12 2 3 13 4 14 5 15 1 6 16 21 17 22 7 23 8 18 9 24 19 20 25 10 2 /* Transformacao da matriz em sua transposta e sua escrita */ for (i = 0; i <= n-2; i++) { for (j = i+1; j <= n-1; j++) { aux = A[i][j]; A[i][j] = A[j][i]; A[j][i] = aux; } } printf ("\nMatriz transposta:\n\n"); for (i = 0; i <= n-1; i++) { for (j = 0; j <= n-1; j++) printf ("%5d", A[i][j]); printf ("\n"); } printf ("\n\n"); system ("pause"); return 0; } A 3 4
6.4.2 – Síntese de sub-matrizes • Muito usada em processamento de imagens – p. ex., para o controle de desmatamento numa região • Dados captados pela câmera de um satélite são armazenados numa imensa matriz bidimensional, para serem usados na confecção de fotografias • Tipicamente uma foto é constituída de uma matriz de pontos, de dimensões bem menores que as da matriz preenchida pela câmera • Então cada ponto da foto deve conter uma síntese das informações contidas numa sub-matriz da primeira matriz
A seguir, o desenvolvimento de um programa para sintetizar o conteúdo das sub-matrizes de uma grande matriz B em elementos de outra matriz A bem menor que a primeira • Dimensões: B(20 x 20) e A(5 x 5) • A síntese consiste na média aritmética dos elementos de cada sub-matriz de B • Sendo inteiros os elementos de B, então os de A devem ser reais • A seguir, um conteúdo possível para a matriz B e o conteúdo correspondente da matriz A
Cada linha de A corresponde a 4 linhas de B • Cada coluna de A corresponde a 4 colunas de B • A linha ‘i’ de A corresponde às linhas de 4i a 4i+3 de B • A coluna ‘j’ de A corresponde às colunas de 4j a 4j+3 de B
A linha ‘i’ de A corresponde às linhas de 4i a 4i+3 de B • A coluna ‘j’ de A corresponde às colunas de 4j a 4j+3 de B • Cálculo de A[i][j]: aux = 0; for (x = 4*i; x <= 4*i + 3; x++) for (y = 4*j; y <= 4*j + 3; y++) aux += B[x][y]; A[i][j] = aux/16;
Cálculo de A[i][j]: aux = 0; for (x = 4*i; x <= 4*i + 3; x++) for (y = 4*j; y <= 4*j + 3; y++) aux += B[x][y]; A[i][j] = aux/16; • Cálculo de toda a matriz A: for (i = 0; i < 5; i++) for (j = 0; j < 5; j++) Cálculo de A[i][j]; A seguir um programa completo
#include <stdio.h> #include <stdlib.h> int main () { /* Declaracoes das variaveis */ float A[5][5]; int B[20][20]; int i, j, k, x, y, z; float aux; char c; /* Formacao da matriz B (20 x 20) */ for (i = k = 0; i < 20; i++) for (j = 0; j < 20; j++) B[i][j] = ++k;
Os 20 elementos preenchem uma linha inteira do vídeo Não é preciso o ‘\n’ no final de cada linha /* Escrita da matriz B (20 x 20) no video */ printf ("Matriz principal? (s/n): "); scanf ("%d", &c); if (c == 's' || c == 'S') { printf ("\n\n"); for (i = 0; i < 20; i++) for (j = 0; j < 20; j++) printf ("%4d", B[i][j]); }
/* Sintetizacao da Matriz B na matriz A */ for (i = 0; i < 5; i++) for (j = 0; j < 5; j++) { aux = 0; for (x = 4*i; x <= 4*i + 3; x++) for (y = 4*j; y <= 4*j + 3; y++) aux += B[x][y]; A[i][j] = aux/16; }
/* Escrita da matriz A(5 x 5) no video */ printf ("\n\nMatriz reduzida? (s/n): "); scanf ("%d", &c); if (c == 's' || c == 'S') { printf ("\n\n"); for (i = 0; i < 5; i++) { for (j = 0; j < 5; j++) printf ("%8.2f", A[i][j]); printf ("\n"); } } /* Fechamento da tela */ printf ("\n\n"); system ("pause"); return 0; }
Exercícios 6.4: • Escrever um programa para ler os elementos de uma matriz A e quatro inteiros i, j, k, l, formando em seguida outra matriz B, contendo uma submatriz de A composta de suas linhas de i a j e de suas colunas de k a l; no final, o programa deve escrever a matriz B • A seguinte matriz tem o apelido de matriz ziguezaguede dimensões 5 x 8: Fazer um programa que leia 2 inteiros positivos m e n e em seguida construa e escreva no vídeo uma matriz ziguezague de dimensões m x n
As seguintes matrizes têm o apelido de matrizes-cebolas de dimensões (6 x 7) e (8 x 5): Fazer um programa para ler m e n e construir uma matriz-cebola de dimensões m e n
As seguintes matrizes têm o apelido de matrizes-espirais de dimensões 5 e 6: Fazer um programa para ler n e construir uma matriz-espiral de dimensão n e
Fazer um programa para ler o valor de uma variável inteira n, os valores dos elementos reais de uma matriz A triangular superior de dimensões (n x n) e de um vetor B de dimensão n, e resolver o seguinte sistema:
Capítulo VI – Variáveis Indexadas 6.1 – A necessidade de variáveis indexadas 6.2 – Vetores e matrizes 6.3 – Aplicações com vetores numéricos 6.4 – Aplicações com matrizes numéricas 6.5 – Cadeias de caracteres 6.6 – Aplicações com vetores de cadeias de caracteres
6.5 – Cadeias de Caracteres 6.5.1 – Cadeias de caracteres como variáveis e constantes • Vetoresdecaracteres são denominados cadeias de caracteres (strings, em Inglês) • Podem ser manipulados de forma diferenciada em relação aos vetores numéricos, pela maioria das linguagens de programação • Tudo começa pela existência de constantes do tipo cadeia de caracteres, mas não de constantes vetores numéricos
Constante cadeia de caracteres é uma sequência de caracteres delimitada por aspas (“”), como por exemplo: “abc DEF” • Os componentes dessa constante são os caracteres da sequência, sem as aspas, e mais o caractere ‘\0’, que é o finalizador da cadeia • Então, os caracteres componentes da constante anterior são: ‘a’, ‘b’, ‘c’, ‘ ’, ‘D’, ‘E’, ‘F’ e ‘\0’
A declaração sem inicialização de uma variável cadeia de caracteres pode ser feita da mesma forma que a de vetores numéricos • Exemplo: charcad[30]; • Mas a declaração com inicialização pode ser feita da seguinte maneira: charcad[] = “ABCDE”; que é equivalente às seguintes: charcad[] = {‘A’, ‘B’, ‘C’, ‘D’, ‘E’, ‘\0’}; charcad[6] = “ABCDE”; charcad[6] = {‘A’, ‘B’, ‘C’, ‘D’, ‘E’, ‘\0’};
charcad[] = “ABCDE”; • Esta declaração reserva espaço na memória para os elementos cad[0], cad[1], cad[2], cad[3], cad[4] e cad[5] e coloca neles os caracteres ‘A’, ‘B’, ‘C’, ‘D’, ‘E’, ‘\0’ • Representação gráfica: cad ‘A’ ‘B’ ‘C’ ‘D’ ‘E’ ‘\0’ 0 1 2 3 4 5
Tal como em vetores numéricos, os elementos de uma cadeia de caracteres podem ser referenciados individualmente • Exemplos:cad[3] = ‘b’; y = cad[i+1]; • A seguinte atribuição não é permitida: cad = “xyzwt”; • Porém, se cad for declarada como sendo do tipo ponteiro para caracteres, isso será permitido
6.5.2 – Leitura e escrita de cadeias de caracteres • O formato “%s” pode ser usado nas funções printf e scanf para fazer escrita e leitura de valores de variáveis do tipo cadeia de caracteres Função printf: • O formato “%s” faz com que os caracteres da variável sejam escritos na tela até que o caractere ‘\0’ seja encontrado, não sendo ele escrito • Por exemplo, os comandos: char cad[10] = “ABCDE”; printf (“%s”, cad); escreverão na tela: ABCDE
Se a variável cad não contiver o caractere ‘\0’: • printf continuará escrevendo todos os caracteres encontrados pela frente, invadindo locais reservados para outras finalidades, até encontrar um byte que contenha ‘\0’ cad ‘A’ ‘B’ ‘C’ ‘D’ ‘E’ ‘F’ 0 1 2 3 4 5
Função scanf : • O formato “%s” procura no buffer do teclado o primeiro caractere diferente do espaço em branco, do ‘enter’ e da tabulação • Ao encontrá-lo, scanf passa a transportar para a variável alvo da leitura todos os caracteres do buffer, até encontrar um caractere espaço em branco, um ‘enter’ ou uma tabulação • Daí, em vez de transportar o espaço em branco, a tabulação ou o ‘enter’, scanf coloca na variável o finalizador ‘\0’, encerrando a leitura para essa variável
Não usar &cad O nome de uma variável indexada é por si só um endereço (cf. ponteiros) Exemplo: seja o seguinte trecho de programa: charcad[20], c; scanf ("%s%c", cad, &c); printf ("\ncadeia lida:%s; caractere lido:%d", cad, c); • Se o operador digitar Se o operador digitar 4 espaços e o ‘enter’: o buffer se esvaziará e o computador ficará esperando nova digitação encerrada por ‘enter’ cad ‘A’‘B’‘C’‘D’‘E’‘\0’ . . . . . ABCDE FGH<enter> c ‘ ’ FGH<enter> ASCII (‘ ’) = 32 Sobra do buffer do teclado No vídeo ABCDE FGH cadeia lida:ABCDE; caractere lido:32
Cuidado: na leitura de uma variável cadeia de caracteres, o número de caracteres digitados não deve exceder o espaço reservado para ela • Exemplo experimental: seja o seguinte trecho de programa: char a, b, c, d, cad[5]; int i; printf ("Digite uma cadeia de caracteres:\n\n"); scanf ("%s", cad); printf ("\ncadeia lida:%s", cad); printf ("\n\na=%d; b=%c; c=%c; d=%c;\n", a, b, c, d); for (i = 0; i <= 4; i++) printf ("\n\tcad[%d] = %c", i, cad[i]); Cadeia digitada abcdefghi<enter>
char a, b, c, d, cad[5]; int i; printf ("Digite uma cadeia de caracteres:\n\n"); scanf ("%s", cad); printf ("\ncadeia lida:%s", cad); printf ("\n\na=%d; b=%c; c=%c; d=%c;", a, b, c, d); for (i = 0; i <= 4; i++) printf ("\n\tcad[%d] = %c", i, cad[i]); Cadeia digitada abcdefghi<enter> cad ‘a’ ‘b’ ‘c’ ‘d’ ‘e’ Digite uma cadeia de caracteres: abcdefghi cadeia lida:abcdefghi a=0; b=h; c=g; d=f; cad[0] = a cad[1] = b cad[2] = c cad[3] = d cad[4] = e Alocação das variáveis na memória, pelo compilador d ‘f’ c ‘g’ b ‘h’ ‘i’ a ‘\0’ Digitando uma sequência maior de caracteres: erro de execução!!! Resultado no vídeo
Função gets : • A função scanf usando o formato %s encerra a leitura de uma cadeia quando encontra um espaço em branco • Então, cadeias contendo espaços em branco não podem ser lidas por ela • No entanto, o arquivo stdio.h da biblioteca de C tem a função gets que resolve esse problema • Ela recebe como argumento a variável do tipo cadeia para a qual se deseja fazer a leitura • Seu retorno, que no momento não tem relevância, é um ponteiro (assunto a ser estudado em capítulo específico)
Exemplo: um programa com gets Tipo cadeia: para variáveis cadeias de 50 caracteres #include <stdio.h> #include <stdlib.h> typedefchar cadeia[50]; int main ( ) { int i, n; cadeia frases [10]; printf ("Numero de frases (ate 10): "); scanf ("%d", &n); printf ("\n"); for (i = 0; i <= n-1; i++) { printf ("Digite a %da frase: ", i+1); setbuf (stdin, NULL); gets (frases[i]); } printf ("\nListagem das frases:\n\n"); for (i = 0; i <= n-1; i++) printf ("%d) %s\n", i+1, frases[i]); printf ("\n\n"); system ("pause"); return 0; } Variável ‘frases’: vetor de cadeias ou matriz de caracteres A função ‘setbuf’ esvazia o buffer do teclado antes da chamada de ‘gets’ Numeração na tela a partir de 1
#include <stdio.h> #include <stdlib.h> typedefchar cadeia[50]; int main ( ) { int i, n; cadeia frases [10]; printf ("Numero de frases (ate 10): "); scanf ("%d", &n); printf ("\n"); for (i = 0; i <= n-1; i++) { printf ("Digite a %da frase: ", i+1); setbuf (stdin, NULL); gets (frases[i]); } printf ("\nListagem das frases:\n\n"); for (i = 0; i <= n-1; i++) printf ("%d) %s\n", i+1, frases[i]); printf ("\n\n"); system ("pause"); return 0; } Resultado de uma execução: Numero de frases (ate 10): 4 Digite a 1a frase: Gosto muito de Computacao! Digite a 2a frase: A Linguagem C ehfantastica! Digite a 3a frase: Programar eh Engenharia! Digite a 4a frase: Engenheiros devem saber algoritmos! Listagem das frases: 1) Gosto muito de Computacao! 2) A Linguagem C ehfantastica! 3) Programar eh Engenharia! 4) Engenheiros devem saber algoritmos! Pressione ...
Função fgets : • É uma versão da função gets, só que para leitura em arquivos • Pertence ao arquivo stdio.h da biblioteca de C • Chamada de fgets: fgets (cad, expr, filein); cad: variável cadeia para a qual se deseja fazer a leitura filein: variável FILE de onde fazer a leitura expr: a função para de ler quando interar expr-1 caracteres lidos ou quando encontrar ‘enter’ • Quando lido o ‘enter’, ele é colocado em cad antes do ‘\0’
Exemplo: um programa com fgets No arquivo, há um número a ser lido, antes de cada frase #include <stdio.h> #include <string.h> #include <stdlib.h> typedefchar cadeia[50]; int main ( ) { int i, j, n, Num[10]; cadeia frases [10]; FILE *filein; filein = fopen ("filefrases", "r"); fscanf (filein, "%d", &n); for (i = 0; i <= n-1; i++) { fscanf (filein, "%d", &Num[i]); fgets (frases[i], 49, filein); } printf ("Listagem das frases:\n\n"); for (i = 0; i <= n-1; i++) printf ("\n%d %s\n\tComprimento: %d\n", Num[i], frases[i], strlen (frases[i])); printf ("\n\n"); system ("pause"); return 0; } Serão lidos no máximo 48 caracteres Para conferir o número de caracteres lidos
4 1Gosto muito de Computacao! 2A Linguagem C ehfantastica! 3Programar eh Engenharia! 4Engenheiros devem saber algoritmos! #include <stdio.h> #include <string.h> #include <stdlib.h> typedef char cadeia[50]; int main ( ) { int i, j, n, Num[10]; cadeia frases [10]; FILE *filein; filein = fopen ("filefrases", "r"); fscanf (filein, "%d", &n); for (i = 0; i <= n-1; i++) { fscanf (filein, "%d", &Num[i]); fgets (frases[i], 49, filein); } printf ("Listagem das frases:\n\n"); for (i = 0; i <= n-1; i++) printf ("\n%d %s\n\tComprimento: %d\n", Num[i], frases[i], strlen (frases[i])); printf ("\n\n"); system ("pause"); return 0; } Conteúdo do arquivo ‘filefrases’ Não há espaço entre o número inicial e a frase Se houvesse, ele seria lido para a frase
Listagem das frases: 1 Gosto muito de Computacao! Comprimento: 27 2 A Linguagem C ehfantastica! Comprimento: 29 3 Programar eh Engenharia! Comprimento: 25 4 Engenheiros devem saber algoritmos! Comprimento: 36 Pressione ... #include <stdio.h> #include <string.h> #include <stdlib.h> typedef char cadeia[50]; int main ( ) { int i, j, n, Num[10]; cadeia frases [10]; FILE *filein; filein = fopen ("filefrases", "r"); fscanf (filein, "%d", &n); for (i = 0; i <= n-1; i++) { fscanf (filein, "%d", &Num[i]); fgets (frases[i], 49, filein); } printf ("Listagem das frases:\n\n"); for (i = 0; i <= n-1; i++) printf ("\n%d %s\n\tComprimento: %d\n", Num[i], frases[i], strlen (frases[i])); printf ("\n\n"); system ("pause"); return 0; } Resultado no vídeo O ‘enter’ no final é escrito e contado pelo strlen
6.5.3 – Funções para conversão de cadeias de caracteres • Função atoi (ASCII to int): converte uma cadeia de caracteres no inteiro correspondente • Função atof (ASCII to float): converte uma cadeia de caracteres no real correspondente • Função itoa (int to ASCII): converte um inteiro numa cadeia de caracteres correspondente, especificada a base numérica para a escrita
Converter cadeia em inteiro? (s/n): s Digite a cadeia: 728391 atoi ("728391") = 728391 Converter cadeia em inteiro? (s/n): s Digite a cadeia: pe182 atoi ("pe182") = 0 Converter cadeia em inteiro? (s/n): s Digite a cadeia: 625xyz atoi ("625xyz") = 625 Converter cadeia em inteiro? (s/n): n Resultado de uma execução Exemplo: seja o seguinte programa Função atoi: converte uma cadeia de caracteres no inteiro correspondente: #include <stdio.h> #include <stdlib.h> typedef char cadeia[50]; int main ( ) { int i; char c; cadeia cad; printf ("Converter cadeia em inteiro? (s/n): "); scanf ("%c", &c); while (c == 's' || c == 'S') { printf ("\n\tDigite a cadeia: "); scanf ("%s", cad); i = atoi (cad); printf ("\tatoi (\"%s\") = %d", cad, i); printf ("\n\nConverter cadeia em inteiro? (s/n): "); scanf (" %c", &c); } printf ("\n\n"); system ("pause"); return 0; }
Converter cadeia em real? (s/n): s Digite a cadeia: 52.1753 atof ("52.1753") = 52.1753 Converter cadeia em real? (s/n): s Digite a cadeia: 167.23e32 atof ("167.23e32") = 1.6723e+34 Converter cadeia em real? (s/n): s Digite a cadeia: 0.0012e-15 atof ("0.0012e-15") = 1.2e-18 Converter cadeia em real? (s/n): n Resultado de uma execução Exemplo: seja o seguinte programa Função atof: converte uma cadeia de caracteres no real correspondente: #include <stdio.h> #include <stdlib.h> typedef char cadeia[50]; int main ( ) { float x; char c; cadeia cad; printf ("Converter cadeia em real? (s/n): "); scanf ("%c", &c); while (c == 's' || c == 'S') { printf ("\n\tDigite a cadeia: "); scanf ("%s", cad); x = atof (cad); printf ("\tatof (\"%s\") = %lf", cad, x); printf ("\n\nConverter cadeia em real? (s/n): "); scanf (" %c", &c); } printf ("\n\n"); system ("pause"); return 0; }
Converter inteiro em cadeia? (s/n): s Digite o int e a base: 2561 10 (2561)10 = ("2561")10 Converter inteiro em cadeia? (s/n): s Digite o int e a base: 87 8 (87)10 = ("127")8 Converter inteiro em cadeia? (s/n): s Digite o int e a base: 2871936 16 (2871936)10 = ("2bd280")16 Converter inteiro em cadeia? (s/n): n Resultado de uma execução Exemplo: seja o seguinte programa Função itoa: converte um inteiro numa cadeia de caracteres correspondente, especificada a base numérica para a escrita: #include <stdio.h> #include <stdlib.h> typedef char cadeia[50]; int main ( ) { int i, base; char c; cadeia cad; printf ("Converter inteiro em cadeia? (s/n): "); scanf ("%c", &c); while (c == 's' || c == 'S') { printf ("\n\tDigite o int e a base: "); scanf ("%d%d", &i, &base); itoa(i, cad, base); printf ("\t(%d)10 = (\"%s\")%d", i, cad, base); printf ("\n\nConverter inteiro em cadeia? (s/n): "); scanf (" %c", &c);} printf ("\n\n"); system ("pause"); return 0; }
6.5.4 – Funções para manipulação de cadeias de caracteres • Função strlen (string length): número de caracteres de uma cadeia • Função strcat (string concatenation): concatena 2 cadeias de caracteres • Função strcmp (string comparision): compara lexicograficamente 2 cadeias de caracteres • Função strcpy (string copy): copia o conteúdo de uma cadeia de caracteres em outra • As 4 funções pertencem ao arquivo string.h da biblioteca