2009-07-23 11 views
0

Mon fichier de test contient des données comme ceci:c de l'entrée de fichier texte aide

1 
2 
3 
0 
1, 2 
3, 4 
0, 0 
4, 3 
2, 1 
0, 0 

Comment pourrais-je séparer les données en ligne, mais aussi séparer chaque section de données par les zéros.

ifstream data("testData.txt"); 
string line, a, b; 


while(getline(data,line)) 
{ 
    stringstream str(line); 
    istringstream ins; 
    ins.str(line); 
    ins >> a >> b; 

    hold.push_back(a); 
    hold.push_back(b); 
} 

Comment les séparer par les zéros?

+0

Faire quelque chose ...? faire quoi? Quelle est votre sortie attendue? – Extrakun

Répondre

1

Donc les lignes sont significatives, et les listes de nombres délimitées par zéro sont également significatives? Essayez quelque chose comme ceci:

std::ifstream data("testData.txt"); 
std::vector<int> hold; 
std::string line; 
std::vector<std::string> lines; 

while(std::getline(data,line)) 
{ 
    lines.push_back(line); 
    std::stringstream str(line); 

    // Read an int and the next character as long as there is one 
    while (str.good()) 
    { 
    int val; 
    char c; 
    str >> val >> c; 
    if (val == 0) 
    { 
     do_something(hold); 
     hold.clear(); 
    } 
    else 
     hold.push_back(val); 
    } 
} 

Ceci ne tolère pas les pannes, mais cela fonctionne. Il repose sur un seul caractère (une virgule) pour être présent après chaque nombre sauf le dernier sur chaque ligne.

3

Tout d'abord, je voudrais essayer d'améliorer la définition du problème ☺

0

Lorsque vous avez terminé, vous avez

[1,2,3,0,1,2,3,4,0,0,4,3,2,1,0,0]

Comment l'utilisation std :: find()?