stringTokenizer.cpp
1.59 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
/**
* 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;
}
}
}