convertir getline() chaîne de nombres d'un tableau ou de l'ints
J'ai un fichier texte écrit comme:
1 2 3 7 8 9 13 14 15
L'objectif est de faire de chaque colonne d'un tableau d'entiers, tels que x=[1,7,13]
, y=[2,8,14]
, z=[3,9,15]
.
Voici ce que j'ai jusqu'à présent...
J'ouvre le fichier texte et de le lire dans le contenu comme une chaîne de caractères:
string fileText;
int n;
int result[];
//file open
ifstream input ("input.txt");
//file read
if(input.is_open())
{
for(int i=0; i<n; i++) //n=3 in this case
{
getline(input, fileText);
result = strtok(fileText," "); //parse each line by blank space " ".
//i get various errors here depending on what I try: such as "must be lvalue"
//or a problem converting string to char.
x[i] = result[0];
y[i] = result[1];
z[i] = result[2];
}
}
Donc mon problème est la conversion d'une ligne de texte en nombres séparés par un espace dans un tableau d'entiers.
C'est assez simple, dans un langage de haut niveau comme PHP, mais en C++, cela devient plus compliqué avec les types de données et les mem allocation, etc.. En Plus je suis un novice!
Grâce
~
Comment pourrais-je le faire sans le vecteur?
Si dire que j'ai eu:
int x*, y*, z*;
alors allouer de la mémoire pour chaque variable pointeur:
x = (int*) malloc (n*sizeof(int)); //where n is the number of lines in the text doc.
y = (int*) malloc (n*sizeof(int));
z = (int*) malloc (n*sizeof(int));
Maintenant, je veux mettre chaque colonne, dans chaque x,y,z tableau d'entiers.
Puis-je faire quelque chose comme:
...
std::string line;
int i;
for (int k=0; k<n; k++)
{
while (std::getline (input, line))
{
std::stringstream parse(line);
parse >> i;
x[k] = i;
parse >> i;
y[k] = i;
parse >> i;
z[k] = i;
}
}
maintenant x = [1,7,13] et ainsi de suite.
Est-il un moyen de le faire sans l'aide de la push_back() la méthode?
Je veux juste lire dans les entiers dans chaque groupe.
utilisation getNextInt() ou quelque chose?
- Êtes-vous familier avec, par exemple,
input >> x[i];
? - Vous ne voulez pas mélanger les chaînes C++ (
getline
) avec C-style cordes (strtok
). Choisissez l'un ou de l'autre et de s'y tenir. - Voici un bon tutoriel sur le C++ IO: cplusplus.com/doc/tutorial/basic_io
- En fait, cela a fonctionné, après la correction de certains problèmes de pointeur.
Vous devez vous connecter pour publier un commentaire.
la création d'un stringstream avec la chaîne renvoyée par getline sera probablement le plus "C++" façon de faire ce que vous essayez de faire.
Le contrôle conditionnel n'est pas nécessaire, mais je l'ai laissé comme vous l'aviez initialement.
Si votre fichier est simple, vous pouvez tout simplement faire ce qui suit:
Ou avec
std::tuple
:Ceci nécessite pas de conversions à tous et échouent dès que le flux échoue. Les deux nécessitent, C++11, donc si vous avez besoin d'un C++03 solution, faites le moi savoir.
Si vous voulez coller à la plaine, vieux tableaux: