Comparar vetores de string de registros diferentes [RESOLVIDO]

1. Comparar vetores de string de registros diferentes [RESOLVIDO]

joao batista c souza
joao.sp28

(usa KUbuntu)

Enviado em 10/11/2018 - 21:43h

Ola galera, é a primeira vez que utilizo o Forum, então me desculpem qualquer desconforto por mim causado. É o seguinte não consigo comparar os vetores de registros diferentes e carregar em outro vetor para imprimir a diferença entre eles, se alguém puder me ajudar por favor.

 #include <iostream>

using namespace std;

typedef struct {
char nome[100];

}lista1;

typedef struct{
char nome2[100];

}lista2;

int main(){

int total;
cin>>total;

lista1 v[total];
for(int i=0;i<total;i++){

cin.getline (v[i].nome,100);
}
int totalB;
cin>>totalB;

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].nome++;
p++;
}
}
for(int i=0;i<p;i++){
cout<<v3[i].nome<<endl;
}
return 0;
}




  


2. Re: Comparar vetores de string de registros diferentes

Paulo
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 structs 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.


3. Re: Comparar vetores de string de registros diferentes [RESOLVIDO]

joao batista c souza
joao.sp28

(usa KUbuntu)

Enviado em 11/11/2018 - 22:15h

Valeu, amigo pela ajuda.
Na verdade eu preciso carregar dois registros e verificar se existe nomes diferentes entre eles, se sim, imprimir quais.
Obrigado pela ajuda


4. Re: Comparar vetores de string de registros diferentes

Fernando
phoemur

(usa Debian)

Enviado em 12/11/2018 - 00:37h

Vou colocar algo aqui só para o incentivo ao uso dos algoritmos da STL.
Em um estilo mais "funcional".
*Se você mandar isso pro seu professor ele vai te dar zero

teste.cpp

#include <algorithm>
#include <iostream>
#include <iterator>
#include <set>
#include <string>

int main()
{
using namespace std;

set<string> A, B;
int total_a, total_b;

cout << "Digite o número e as strings do primeiro conjunto:\n";
cin >> total_a;
copy_n(istream_iterator<string>(cin), total_a, inserter(A, end(A)));

cout << "Digite o número e as strings do segundo conjunto:\n";
cin >> total_b;
copy_n(istream_iterator<string>(cin), total_b, inserter(B, end(B)));

cout << endl;

cout << "Elementos presentes apenas em A (ausentes em B):\n";
set_difference(begin(A), end(A),
begin(B), end(B),
ostream_iterator<string>(cout, "\n"));

cout << endl;

cout << "Elementos presentes apenas em B (ausentes em A):\n";
set_difference(begin(B), end(B),
begin(A), end(A),
ostream_iterator<string>(cout, "\n"));

cout << endl;

cout << "Elementos presentes em ambos (A && B):\n";
set_intersection(begin(A), end(A),
begin(B), end(B),
ostream_iterator<string>(cout, "\n"));

cout << endl;

cout << "Elementos presentes apenas em A ou em B (porém não em ambos):\n";
set_symmetric_difference(begin(A), end(A),
begin(B), end(B),
ostream_iterator<string>(cout, "\n"));

return 0;
}


Saída:

[phoemur@notebook_lenovo.darkstar ~]$g++ teste.cpp -Wall -std=c++14
[phoemur@notebook_lenovo.darkstar ~]$./a.out

Digite o número e as strings do primeiro conjunto:
5
cachorro gato coelho papagaio peixe
Digite o número e as strings do segundo conjunto:
5
cachorro gato elefante girafa slackware_linux

Elementos presentes apenas em A (ausentes em B):
coelho
papagaio
peixe

Elementos presentes apenas em B (ausentes em A):
elefante
girafa
slackware_linux

Elementos presentes em ambos (A && B):
cachorro
gato

Elementos presentes apenas em A ou em B (porém não em ambos):
coelho
elefante
girafa
papagaio
peixe
slackware_linux


Forte abraço
______________________
https://github.com/phoemur


5. Re: Comparar vetores de string de registros diferentes [RESOLVIDO]

joao batista c souza
joao.sp28

(usa KUbuntu)

Enviado em 13/11/2018 - 00:35h

Poxa valeu cara, valeu mesmo, aprender nunca é demais, acho que vou tentar usar sua logica de comparação e ver que no da. Grande abraço.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts