paulo1205
(usa Ubuntu)
Enviado em 10/11/2018 - 23:59h
Prezado,
Seu programa está um tanto confuso, principalmente por ao misturar C e C++ de uma forma que você tenta usar recursos de C que ou são incompatíveis (
arrays de tamanho variável) ou que são feitos de outra maneira em C++ (
typedef para
struct s anônimas, em vez de lhes atribuir nomes e usar esses nomes como tipos).
Veja o que acontece quando se tenta compilar seu código com alertas ligados.
g++ -pedantic-errors -std=c++11 -Wall -Werror -O2 x.cc
x.cc: In function ‘int main()’:
x.cc:20:19: error: ISO C++ forbids variable length array ‘v’ [-Wvla]
lista1 v[total];
^
x.cc:28:21: error: ISO C++ forbids variable length array ‘v1’ [-Wvla]
lista2 v1[totalB], v3[total];
^
x.cc:28:32: error: ISO C++ forbids variable length array ‘v3’ [-Wvla]
lista2 v1[totalB], v3[total];
^
x.cc:35:15: error: ‘strcmp’ was not declared in this scope
if(strcmp(v[i].nome,v1[i].nome2)!=0))
^~~~~~
x.cc:35:15: note: suggested alternative: ‘strtoq’
if(strcmp(v[i].nome,v1[i].nome2)!=0))
^~~~~~
strtoq
x.cc:35:48: error: expected primary-expression before ‘)’ token
if(strcmp(v[i].nome,v1[i].nome2)!=0))
^
x.cc:41:17: error: ‘struct lista2’ has no member named ‘nome’; did you mean ‘nome2’?
cout<<v3[i].nome<<endl;
^~~~
nome2
Eu tentei corrigir os erros de sintaxe e de símbolos indefinidos, bem como trocar recursos obsoletos do C por elementos próprios do C++, mas mesmo isso ainda tem um erro lógico que impede a compilação (e que já existia no programa original, mas não apareceu como tal porque você usou o nome errado do campo da estrutura).
#include <iostream>
#include <vector>
#include <cstring>
using namespace std;
struct lista1 {
char nome[100];
};
struct lista2 {
char nome2[100];
}; // XXX: Essa estrutura é quase idêntica à primeira (muda o nome do campo, mas não seu tipo ou tamanho).
// Você realmente precisa de outro tipo de dados?
int main(){
int total;
cin>>total;
vector<lista1>v(total);
for(int i=0;i<total;i++)
cin.getline (v[i].nome,100);
int totalB;
cin>>totalB;
vector<lista2> v1(totalB), v3(total);
for(int i=0;i<totalB;i++)
cin.getline(v1[i].nome2,100);
int p=0;
for(int i=0;i<total;i++)
for(int j=0;j<totalB;j++){
if(strcmp(v[i].nome,v1[i].nome2)!=0)
v3[i].nome2++; // <--- ERRO: não se pode incrementar um array.
// O que você quis realmente fazer?
p++;
}
for(int i=0;i<p;i++)
cout<<v3[i].nome2<<endl;
return 0;
}
Seria interessante saber o que você realmente gostaria de fazer quando encontrar uma diferença entre as duas listas de nomes. Como está, não faz sentido.