Problema di token e memorizzazione di matrici di char*

di il
3 risposte

Problema di token e memorizzazione di matrici di char*

Salve a tutti, scrivo qui perché ho questo problema, non riesco a venirne fuori

Allora... ho necessità di tokenizzare delle frasi e per ogni frase memorizzare i token delle parole in un vector e per ogni vector con i token memorizzarlo in un vector di vector... se li gestisco come vector di string riesco nel mio intento, però vorrei usare i char*, quindi gestisco un vector<vector<char *> >.

Dopo l'operazione, se faccio delle stampe di controllo, mi rendo conto che non è dovrebbe essere, mi stampa cose sballate e non capisco perché sicuramente sto facendo casino con i puntatori...

Questo è il programma:

#include <cstring>
#include <iostream>
#include <string>
#include <vector>
using namespace std;

int main() {

	vector<vector<char*> > allPhrases;
	vector<char *> phrase;

	string line;
	char* token;

	while(getline(cin, line)) {

		if(line == "-1")
			break;

		cout << endl;

		token = strtok((char*)line.c_str(), " ");

		while(token != NULL) {

			phrase.push_back(token);
			token = strtok(NULL, " ");

		} // while

		allPhrases.push_back(phrase);
		phrase.clear();

		for(vector<vector<char*> >::iterator it1 = allPhrases.begin(); it1 != allPhrases.end(); it1++) {
			for(vector<char*>::iterator it2 = (*it1).begin(); it2 != (*it1).end(); it2++)
				cout << *it2 << " ";
			cout << endl;
		} // for.

	} // while.

	return 0;

} // main.
Per ogni inserimento di un vector, stampo l'intera matrice.
Faccio un esempio, se inserisco questo:
aa aa
bb bb
cc cc cc cc
dd dd dd dd
-1
dovrebbe stampare questo:
aa aa

aa aa
bb bb

aa aa
bb bb
cc cc cc cc

aa aa
bb bb
cc cc cc cc
dd dd dd dd
invece stampa questo:
aa aa

bb bb
bb bb

ap>
ap>
cc cc cc cc

ap>
ap>
dd dd dd dd
dd dd dd dd
Stranamente l'ultimo vector inserito lo stampa correttamente, ma gli altri no grazie per l'attenzione.

3 Risposte

Devi accedere o registrarti per scrivere nel forum
3 risposte