Uso de espaços em vetores no C [RESOLVIDO]

1. Uso de espaços em vetores no C [RESOLVIDO]

Ícaro Gontijo Fernandes Sanches de Andrade
Igfsa

(usa Ubuntu)

Enviado em 18/11/2016 - 13:27h

Estou começando a operar em C e estou fazendo um script para transformar uma frase (armazenada em uma string)
em um vetor de números.
Minha lógica consiste em criar um vetor com os caracteres usados (letras minúsculas de a-z e espaço) e usar a posição de cada caractere para transformar em um vetor de números. Porém ao inserir espaço em minha entrada, quando o programa vai fazer a transformação de caractere para números o espaço é transformado em 0 ou algum outro número aleatório.

Abaixo segue o script:


#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(){
int b, i, j;
char sp[100], sct[100];
int sc[100];
char sn[28] = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z',' ','\0'};//string usada para converter as letras em números
printf("Entre com sua frase: ");
fgets(sp,100,stdin);
printf("\n");
printf("O que você digitou foi:\n%s\n", sp);
b=strlen(sp)-1;
for(i=0;i<b;i++){
for(j=0;j<26;j++){
if (sp[i]==sn[j]){//pelo que sei, é aqui que meu programa está dando erro
sc[i]=j+1;
}
}
}
printf("O 'valor numérico' de sua frase é:\n");
for(i=0;i<b;i++){
printf("%i ",sc[i]);
};
for(i=0;i<b;i++){
for(j=0;j<28;j++){
if (sc[i]==j){
(sct[i]=sn[j-1]);
}
}
}
sct[i]='\0';
printf("\n%s",sct);
return(0);
}

Tem como eu usar o espaço dessa maneira? Existe algum procedimento especial para caracteres como espaço? A máquina está interpretando o espaço como caractere vazio?


  


2. Re: Uso de espaços em vetores no C

Enzo de Brito Ferber
EnzoFerber

(usa FreeBSD)

Enviado em 18/11/2016 - 13:40h

Olá, boa tarde!

O alfabeto tem 26 letras, mas seu vetor com o espaço tem 27 elementos.
No seu loop, você só itera em 26 elementos, não 27.


for(i=0;i<b;i++){
for(j=0;j<26;j++){
if (sp[i]==sn[j]){//pelo que sei, é aqui que meu programa está dando erro
sc[i]=j+1;
}
}
}


Você nunca vai comparar o espaço, que é o elemento 26.
Alterando para <= ou então para 27 deverá corrigir.


for(i=0;i<b;i++){
for(j=0;j<27;j++){ /* alteracao aqui */
if (sp[i]==sn[j]){
sc[i]=j+1;
}
}
}



Enzo Ferber
[]'s


$ indent -kr -i8 src.c

"(...)all right-thinking people know that (a) K&R are _right_ and (b) K&R are right."
- linux/Documentation/CodingStyle - TORVALDS, Linus.



3. Re: Uso de espaços em vetores no C [RESOLVIDO]

Paulo
paulo1205

(usa Ubuntu)

Enviado em 18/11/2016 - 13:44h

Igfsa escreveu:

		for(j=0;j<26;j++){ 


Se o índice j conta de 0 a 25 (1º ao 26º elementos), e o espaço é o 27º elemento, nunca haverá um valor de j que encontre o espaço. Logo, o valor da variável de saída não é efetivamente determinado, e acaba contendo qualquer coisa.


4. Consegui

Ícaro Gontijo Fernandes Sanches de Andrade
Igfsa

(usa Ubuntu)

Enviado em 18/11/2016 - 13:46h

Coloquei o espaço como primeiro elemento do vetor (sn[28] = {' ','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','\0'};), alterei os valores de j e o programa funcionou normalmente. Obrigado!!






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts