2017-02-06 11 views
0

Der Benutzer gibt eine Liste von Zahlenpaaren ein, die durch Kommata getrennt sind. Beispiel ... 1, 1 4, 67 90, 87 OR:wie man 2 Vektoren aus Paaren von Zahlen, die durch Kommas getrennt sind, befüllt C++

30, 50 

560, 70 

90, 40 

Ich habe 2 Vektoren mit diesen Zahlen zu füllen. Der erste von jedem Paar geht in den ersten Vektor und die zweite Zahl in jedes Paar geht in den zweiten Vektor.

Ich weiß, wie in einem Vektor zu lesen und wie man aus drucken ..

vector<int> v; 
int i; 
while (cin >> i) 
{ 
    v.push_back(i); 
} 
// print out the vector 
for (auto x : v) 
{ 
    cout << x << ", "; 
} 

aber ich bin nicht sicher, wie die zwei Vektoren

+1

Müssen die Zahlen mit einem Komma eingegeben werden? Solch eine lästige Komplikation. Warum nicht ein leerer Raum? – DeiDei

+0

yeah sie müssen Kommas haben – Joe

+0

Handhabung ungültiger Eingabe könnte irgendwie unordentlich sein, aber vielleicht: ersten Wert in ersten Vektor lesen, lesen Sie Zeichen, bis Sie das Komma finden, lesen Sie zweiten Wert in zweiten Vektor, und wiederholen. –

Antwort

0

Wie zu füllen, wenn Sie dies tun?

vector<int> v; //vector 1 
vector<int> vv; //vector 2 
int i;int j; 
while (cin >> i) 
{ 
    v.push_back(i); 
    cin >> j; 
    vv.push_back(j); 
} 
// print out the first vector 
for (auto x : v) 
{ 
    cout << x << ", "; 
} 

// print out the second vector 
for (auto y : vv) 
{ 
    cout << y << " "; 
} 
+0

könnte auf der richtigen Spur sein, aber nicht funktioniert. Ich denke, ich muss auch die Kommas und Leerzeichen in der Eingabe berücksichtigen – Joe

+0

Können Sie das Beispiel von Eingabe- und Ausgabeformat zur Verfügung stellen, die Sie brauchen? – Knight

0

Ich machte, was Sie wollten mit dem Code unten. Dieser Code setzt voraus, dass die Benutzereingaben in der von Ihnen gewünschten Form vorliegen (Nummer1, (Leerzeichen) Nummer2) und hört auf zu lesen, wenn das Wort "Über" angegeben wird. Die Zahl 1 jeder Zeile wird im Vektor v1 gespeichert und die Nummer 2 jeder Zeile wird im Vektor v2 gespeichert.

int main() 
{ 
    vector<string> v; 
    vector<int> v1; 
    vector<int> v2; 
    string inp; 
    do 
    { 
     cin >> inp; 
     v.push_back(inp); 
    } 
    while (inp.compare("over") !=0); 

    for (int i=0; i<v.size(); i++) 
    { 
     if (v[i].compare("over") != 0){ 
      if (i%2==0){ 
       v1.push_back(atoi(v[i].c_str())); 
      } else { 
       v2.push_back(atoi(v[i].c_str())); 
      } 
     } 
    } 

    cout << "v1" << endl; 
    for (int i=0; i<v1.size(); i++) 
    { 
     cout << v1[i] << endl; 
    } 

    cout << "v1" << endl; 
    for (int i=0; i<v2.size(); i++) 
    { 
     cout << v2[i] << endl; 
    } 

    return 0; 
} 
0

Wenn ich so Dinge zu tun haben musste, habe ich in der Regel mit einem kleinen Eingabe-Operator zu lesen und zu überprüfen (aber ansonsten ignorieren) das Trennzeichen gestartet:

std::istream &operator>>(std::istream &is, char const *delim) { 

    while (isspace((unsigned char)*delim)) 
     ++delim; 

    while (isspace((unsigned char)is.peek())) 
     is.ignore(1); 

    while (*delim == is.peek()) { 
     ++delim; 
     is.ignore(1); 
    } 

    if ('\0' != *delim) 
     is.setstate(std::ios::failbit); 

    return is; 
} 

Vor diesem Ort, können wir etwas tun:

std::vector<int> u; 
std::vector<int> v; 

int a, b; 
while (is >> a >> "," >> b) { 
    u.push_back(a); 
    v.push_back(b); 
} 

Meine unmittelbare Neigung, jedoch wäre die Beziehung zwischen den beiden Werten zu prüfen, die Sie gerade lesen. Wenn sie eng verwandt sind, sollten Sie besser eine Struktur erstellen, die beide enthält, und dann einen Vektor dieser Strukturen erstellen (mit einer Überladung von operator>> für den Strukturtyp, der dem oben gezeigten ähnlich ist).

Verwandte Themen