J'essaie de lire dans un fichier texte, séparez les valeurs d'entier par des virgules et des espaces blancs "" et ajoutez chaque entiers à l'exclusion de "", "à un vecteur d'entiers. Le code suivant n'imprime que la première valeur. Qu'est-ce que je fais mal? et voici le fichier texte "scores.txt" :: p>
4 Réponses :
Je l'ai compris si quelqu'un se passe sur ceci à la recherche d'une réponse. Utilisez pour vérifier s'il s'agit d'un espace blanc ou d'une virgule au lieu de p>
Ce n'est pas une solution complète. Ce code seul détectera l'espace dans le flux d'entrée et l'ignorera. Cela laisse la virgule dans le flux d'entrée à ramasser par ss >> i code>, et
ss >> i code> ne peut pas analyser une virgule. Il doit être enveloppé dans une boucle.
Il n'y a pas besoin de recourir à Vous pouvez simplement remplacer toutes les virgules par un espace, puis utiliser EXEMPLE LIVE P> P> Peek () code> et
Ignorer () code>.
std :: istringingstream. code> p>
Cela devrait fonctionner. Il analyse la ligne de fichier par ligne, correspondant à toutes les chaînes requises, puis à les convertir en int tout en les ajoutant au std :: vecteur code>.
#include <regex>
#include <string>
#include <vector
int main()
{
std::ifstream fileIn("Scores.txt")
std::string str;
std::regex words_regex("[^, ]+");
std::vector<int> vecOfStrs();
while (std::getline(fileIn, str))
{
if (str.size() > 0)
{
auto words_begin = std::sregex_iterator(s.begin(), s.end(), words_regex);
auto words_end = std::sregex_iterator()
for (std::sregex_iterator i = words_begin; i != words_end; ++i)
vecOfStrs.emplace_back(std::stoi(*i.str()));
}
}
}
Changez votre boucle à cela et ça va marcher! Testé-le sur mon côté avec le reste de votre code.
for(string i; ss >> i;)//treat as string for string manipulation { size_t pos=str.find(','); //look for a comma if(pos!=std::string::npos) i.erase(pos); //if comma is found, erase it! vecOfStrs.push_back(stoi(i)); //convert string to integer }
Note latérale: Les guillemets célibataires désignent un caractère.
',' code> essaie de tracer 2 caractères dans un seul caractère. Les résultats de cela sont quelque peu étranges. La plupart des compilateurs donneront un avertissement. N'ignorez pas les avertissements. Ils sont la première ligne de défense contre les erreurs logiques.
Vous auriez pu faire juste un
std :: remplacer code> de toutes les virgules avec un espace, puis utilisez
std :: istringstream code> sans tous ces
peek code> appels.