Dúvida sobre strings

1. Dúvida sobre strings

Rafaela Drout
raicai

(usa Ubuntu)

Enviado em 23/08/2015 - 11:33h

Bom dia pessoal, estava elaborando o seguinte código e me surgiu uma dúvida

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

int main(){
char *entrada;
char *saida;
int n, i, q;
int compare;
entrada=(char *) malloc((n+1) * sizeof(char));
saida=(char *) malloc((n+1) * sizeof(char));

printf("Digite quantas palavras deseja entrar: \n");
scanf("%d", &n);

for(i=0; i<n; i++){
printf("");
scanf("%s", entrada);
}

printf("Digite quantas palavras deseja sair: \n");
scanf("%d", &q);

for(i=0; i<q; i++){
printf("");
scanf("%s", saida);
}

int comparar= strcmpi(entrada, saida);

}


Como posso realizar um "for" pra que seja comparado que as palavras que estão na saída constam na entrada? Por exemplo:

Entrada: Mesa, Tabua, Cadeira
Saida: Tabua

O "for" irá comparar Tabua com as 3 palavras da entrada e imprimir que a palavra consta ou não na entrada. Podem me ajudar?


  


2. Re: Dúvida sobre strings

Paulo
paulo1205

(usa Ubuntu)

Enviado em 23/08/2015 - 22:28h

raicai escreveu:

Bom dia pessoal, estava elaborando o seguinte código e me surgiu uma dúvida

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

int main(){
char *entrada;
char *saida;
int n, i, q;
int compare;
entrada=(char *) malloc((n+1) * sizeof(char));
saida=(char *) malloc((n+1) * sizeof(char));


Quanto vale n neste ponto do programa? Como pode usar um valor desconhecido para fazer alocação de memória?

Nessas alocações, você está alocando caracteres, não palavras.

        printf("Digite quantas palavras deseja entrar: \n");
scanf("%d", &n);


Agora você finalmente definiu n (ou não, pois scanf() ainda pode falhar). Só que o ponto alocação já passou.

Além do mais, você dá a entender ao usuário que ele vai digitar a quantidade de palavras. Mas mesmo que a alocação estivesse no lugar certo, nós já vimos que você fez de uma forma em que aloca a quantidade de caracteres, não de palavras.

                for(i=0; i<n; i++){
printf("");
scanf("%s", entrada);
}


Nesse laço de repetição, você sobrescreve o mesmo array de caracteres a cada nova leitura.

De novo, você comete o erro de não verificar se scanf() falhou ou não. Só que agora comete ainda mais um erro em potencial, que é o de não limitar a quantidade máxima de caracteres que podem ser lidos numa palavra. Se a sua alocação quebrada (você não sabe o valor inicial de n) tiver alocado só um byte, qualquer palavra que você ler vai extrapolar o tamanho alocado, gravando os caracteres recebidos em memória que ou não deveria ser usada ou que deveria ser usada para outra coisa.

        printf("Digite quantas palavras deseja sair: \n");
scanf("%d", &q);

for(i=0; i<q; i++){
printf("");
scanf("%s", saida);
}


Erros análogos aos já apontados acima.

        int comparar= strcmpi(entrada, saida); 


Aqui você compara somente duas palavras, não várias palavras de um conjunto com várias palavras de outro.

} 


Cadê o resto do programa?

Uma dica que eu dou a você para fazer o que você quer é a seguinte: já que você lê primeiro todas as palavras de um conjunto, na hora de ler o segundo conjunto, compare cada palavra lida assim que terminar de lê-la. Assim, você economiza pelo menos um laço de repetição.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts