Witam
Mam problem z zadaniem:
Napisz program który przyjmuje dwa ciągi liczb naturalnych oddzielonych przecinkiem typu string. Porównaj ze sobą dwa ciągi i wypisz na ekran te liczby które się powtarzają w obu ciągach.
Tutaj przedstawiam moje wypociny. Otóż jestem dopiero początkujący wiec nie znam wszystkich komend itp wiec jeżeli macie jakiś pomysł na skrócenie tego kodu bądź "ulepszenie" czy nawet dorzucenie jakiś rad byłbym bardzo wdzięczny. Mam jeszcze problem, czy jest jakiś znak który oznacza koniec stringu ? W programie nie zczytuje mi ostatniej liczby gdyż nie ma tam przecinka i zamiast tego chciałbym wskazać koniec stringa.
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
int main(int argc, char* argv[])
{
string a ("12,13,34,35,67,78");
string b ("11,14,54,163,78,23,87,13,12");
string c, z;
int j, q, k=1, f=0, v=0, x=1;
for(int i=0; i<a.length();i++)
{
if(ispunct(a[i]))
{
x++;
}
}
for(int i=0; i<b.length();i++)
{
if(ispunct(b[i]))
{
k++;
}
}
int *tab=new int[x];
int *tab2=new int[k];
c=a[0];
z=b[0];
for(int i=1;i<a.length();i++)
{
if(a[i]!=',')
{
c+=a[i];
}
else if(a[i]==',' || a[i]=='\0') //tutaj mam problem bo chce zeby if sie wykonal jesli napotka przecinek lub koniec stringu
{
istringstream m(c);
m>>j;
tab[f]=j;
f++;
c.clear();
c=a[i+1];
i++;
}
}
c.clear();
for(int i=1;i<b.length();i++)
{
if(b[i]!=',')
{
z+=b[i];
}
else if(b[i]==',')
{
istringstream g(z);
g>>q;
tab2[v]=q;
v++;
z.clear();
z=b[i+1];
i++;
}
}
z.clear();
for(int i=0;i<x;i++)
for(int j=0;j<k;j++)
{
if(tab[i]==tab2[j])
cout<<tab[i]<<", ";
}
system("PAUSE");
return 0;
}