diff options
-rw-r--r-- | base/str.cc | 23 | ||||
-rw-r--r-- | test/tokentest.cc | 64 |
2 files changed, 50 insertions, 37 deletions
diff --git a/base/str.cc b/base/str.cc index 3a11bb17d..15f44dad2 100644 --- a/base/str.cc +++ b/base/str.cc @@ -26,11 +26,10 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -#include <iostream> - -#include <string.h> #include <ctype.h> +#include <cstring> +#include <iostream> #include <string> #include <vector> @@ -75,15 +74,17 @@ tokenize(vector<string>& v, const string &s, char token, bool ignore) string::size_type first = 0; string::size_type last = s.find_first_of(token); - if (ignore) { - if (last == first) { - while (last == first) - last = s.find_first_of(token, ++first); + if (s.empty()) + return; - if (last == string::npos) { - v.push_back(s); - return; - } + if (ignore && last == first) { + while (last == first) + last = s.find_first_of(token, ++first); + + if (last == string::npos) { + if (first != s.size()) + v.push_back(s.substr(first)); + return; } } diff --git a/test/tokentest.cc b/test/tokentest.cc index cd2182141..7f27d58fe 100644 --- a/test/tokentest.cc +++ b/test/tokentest.cc @@ -26,7 +26,7 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -#include <iostream.h> +#include <iostream> #include <string> #include <vector> @@ -35,35 +35,47 @@ int main(int argc, char *argv[]) { - if (argc != 3) { - cout << "Usage: " << argv[0] << " <string> <token>\n"; - exit(1); - } + using namespace std; - int i; - string test = argv[1]; - vector<string> tokens1; - vector<string> tokens2; - char token = argv[2][0]; + if (argc != 3) { + cout << "Usage: " << argv[0] << " <string> <token>\n"; + exit(1); + } - cout << "string = \"" << test << "\", token = \'" << token << "\'\n"; - cout << "testing without ignore\n"; - tokenize(tokens1, test, token, false); + int i; + string test = argv[1]; + vector<string> tokens1; + vector<string> tokens2; + char token = argv[2][0]; - if (tokens1.size()) { - for (i = 0; i < tokens1.size() - 1; i++) - cout << tokens1[i] << "(" << tokens1[i].size() << "), "; - cout << tokens1[i] << "(" << tokens1[i].size() << ")\n"; - } + cout << "string = \"" << test << "\", token = \'" << token << "\'\n"; + cout << "testing without ignore\n"; + tokenize(tokens1, test, token, false); - cout << "testing with ignore\n"; - tokenize(tokens2, test, token, true); + if (tokens1.size()) { + int size = tokens1.size(); + cout << "size = " << size << "\n"; + for (i = 0; i < size; i++) { + cout << "'" << tokens1[i] << "' (" << tokens1[i].size() + << ")" << ((i == size - 1) ? "\n" : ", "); + } + } else { + cout << "no tokens" << endl; + } - if (tokens2.size()) { - for (i = 0; i < tokens2.size() - 1; i++) - cout << tokens2[i] << "(" << tokens2[i].size() << "), "; - cout << tokens2[i] << "(" << tokens2[i].size() << ")\n"; - } + cout << "testing with ignore\n"; + tokenize(tokens2, test, token, true); - return 0; + if (tokens2.size()) { + int size = tokens2.size(); + cout << "size = " << size << "\n"; + for (i = 0; i < size; i++) { + cout << "'" << tokens2[i] << "' (" << tokens2[i].size() + << ")" << ((i == size - 1) ? "\n" : ", "); + } + } else { + cout << "no tokens" << endl; + } + + return 0; } |