Ir ao conteúdo
  • Cadastre-se
JPRD

C++ "error: invalid operands to binary +"

Recommended Posts

 Olá a todos! Eu estou tendo problemas com um algoritmo que estou tentando implementar de pseudocódigo para C.

 No algoritmo abaixo, o ponteiro q, que está apontando para o vetor de string da struct elemento, ele irá receber o resultado do concatenamento do conteúdo do índice que o ponteiro p está apontando do vetor de string da struct elemento mais uma letra do mesmo conteúdo que ele aponta iniciando de trás para frente.

 Caso a explicação tenha ficado muito confusa, basicamente é um algoritmo que espelha uma palavra junto a ela própria e mostrar na tela o processo disso acontecendo passo-a-passo.

 Exemplo: Ana + 'a' + 'n' + 'A' = AnaanA (adicionando uma palavra por repetição e imprimindo na tela)

 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct elemento Elemento;
typedef Elemento *Ponteiro;
typedef char *string;
struct elemento {
    int chave;
    string vet[3];
    Ponteiro Prox;
};
Ponteiro p,prim,h,q;
int i;
int main () {
    prim = NULL;
    p = (void *)malloc(sizeof(int));
    h = p;
    (*p).chave = 1;
    (*p).vet[1] = "Ana";
    (*p).vet[2] = "Bia";
    (*p).vet[3] = "Lia";
    puts((*p).vet[1]);
    puts((*p).vet[2]);
    puts((*p).vet[3]);
    for (i=1;i<=3;i++) {
        q = (void *)malloc(sizeof(int));
        (*q).vet[1] = (*p).vet[1]+(*p).vet[1,4-i]; //"error: invalid operands to binary +"
        (*q).vet[2] = (*p).vet[2]+(*p).vet[2,4-i]; //"error: invalid operands to binary +"
        (*q).vet[3] = (*p).vet[3]+(*p).vet[3,4-i]; //"error: invalid operands to binary +"
        printf("\n%s \n",(*q).vet[1]);
        printf("%s \n",(*q).vet[2]);
        printf("%s \n",(*q).vet[3]);
        p = q;
    };
    free(p);
    free(q);
    return 0;
}

 

 O Error que estou tendo é este:

Citação

error: invalid operands to binary +


 Eu coloquei um comentário ao lado das linhas que estão ocorrendo esse erro.

 Eu entendo que não é possível usar o operador de soma com strings, mas eu já tentei utilizar strcat e stcpy e atribuir o resultado dessa operação para o ponteiro q (eu até deixei a biblioteca string.h ainda no algoritmo), na compilação não deu erro, mas na execução o programa parava de funcionar.


 Eu cometi algum erro no meu algoritmo?

 Desde já, agradeço!

 Ps: Sou novo por aqui.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu nunca vi tanto erro junto.
Se esse programa tivesse a menor chance de funcionar seria assim:
 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct elemento Elemento;
typedef Elemento* Ponteiro;
typedef char *string;
struct elemento {
    int chave;
    string vet[3];
    Ponteiro Prox;
};
Ponteiro p,prim,h,q;
int i;
int main () {
    prim = NULL;
    char sr[100];

    p = (Elemento*)malloc(sizeof(struct elemento));
    h = p;
    (*p).chave = 1;

    (*p).vet[0] = (char*)malloc(sizeof(char)*100);
    (*p).vet[1] = (char*)malloc(sizeof(char)*100);
    (*p).vet[2] = (char*)malloc(sizeof(char)*100);

    strcpy ( (*p).vet[0] , "Ana");
    strcpy ( (*p).vet[1] , "Bia");
    strcpy ( (*p).vet[2] , "Lia");

    puts(p->vet[0]);
    puts(p->vet[1]);
    puts(p->vet[2]);

    strcpy(sr, p->vet[0]);
    strrev( sr );
    strcat(p->vet[0], sr);

    strcpy(sr, p->vet[1]);
    strrev( sr );
    strcat(p->vet[1], sr);

    strcpy(sr, p->vet[2]);
    strrev( sr );
    strcat(p->vet[2], sr);

    puts(p->vet[0]);
    puts(p->vet[1]);
    puts(p->vet[2]);



    free((*p).vet[0]);
    free((*p).vet[1]);
    free((*p).vet[2]);

    free(p);
    return 0;
}

não vou nem tentar explicar porque si não vou ter que explicar a linguagem toda. Se tiver duvida em uma parte concreta pergunte.

  • Curtir 3

Compartilhar este post


Link para o post
Compartilhar em outros sites

@vangodp Entendi. Eu não conhecia essa função strrev, mas vou tentar aplica-la e consertar os erros que eu cometi (ainda estou aprendendo).

Muito obrigado!

  • Curtir 2

Compartilhar este post


Link para o post
Compartilhar em outros sites

ponteiros e memória dinâmica sao o pior, pratique muito e o resto irá suave

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×