stringTokenizer.cpp 1.59 KB
/**
 * Classe de geracao de tokens de strings. Utiliza a funcao strtok da lib string.h
 *
 * @author Derzu Omaia
 * @date 21/10/2009
 *
 */

#include "stringTokenizer.h"
#include <string.h>
#include "dprintf.h"

using namespace std;

namespace Util {

	StringTokenizer::StringTokenizer(const char * input, const char * delimiters) {
		tokens.clear();
		indiceAtual = 0;

		tokenize(input, delimiters);
	}

	StringTokenizer::~StringTokenizer() {
		tokens.clear();
	}

	/**
	 * Gera os tokens, e os armazena em um vetor
	 *
	 **/
	void StringTokenizer::tokenize(const char * str, const char * delimiters)
	{
		char * token;
		token = strtok((char*)str, delimiters);
		while (token != NULL)
		{
			//printf ("%s\n", token);
			tokens.push_back( string(token) );
			token = strtok (NULL, delimiters);
		}
	}


	/**
	 * Retorna a quantidade de tokens
	 *
	 **/
	int StringTokenizer::getLength() {
		return tokens.size();
	}

	/**
	 * Verifica se existe proximo token
	 *
	 **/
	bool StringTokenizer::hasNext() {
		if (indiceAtual<tokens.size())
			return true;
		else
			return false;
	}

	/**
	 * Retorna o proximo token
	 *
	 * @return retorna um char*constante, que nao deve ser "freezado"
	 **/
	const char * StringTokenizer::getNext() {
		return tokens[indiceAtual++].c_str();
	}


	/**
	 * Retorna o token especificado pelo indice
	 *
	 * @return retorna um char*constante, que nao deve ser "freezado"
	 **/
	const char * StringTokenizer::getToken(unsigned int indice) {
		if (indice<tokens.size())
			return tokens[indice].c_str();
		else {
			DDPRINTF("Indice ultrapassou o tamanho maximo do vetor");
			return NULL;
		}
	}

}