Я пытался написать простой токенайзер std :: string на c ++, и я не могу заставить его работать правильно.Я нашел один онлайн, который работает , и я понимаю, почему он работает .... но я все еще не могу понять, почему мой оригинальный не работает .Я предполагаю, что это какая-то глупая маленькая вещь, которую мне не хватает ... Я был бы признателен за указатель в правильном направлении;спасибо!
ввод (случайный символ и символы с символом "\ n", \ t "):
"This is a test string;23248h> w chars, aNn, 8132; ai3v2< 8&G,\nnewline7iuf32\t2f,f3rgb, 43q\nefhfh\nu2hef, wew; wg"
токенизатор:
size_t loc, prevLoc = 0;
while( (int)(loc = theStr.find_first_of("\n", prevLoc) ) > 0) {
string subStr = theStr.substr(prevLoc, loc-1); // -1 to skip the \n
cout << "SUBSTR: '" << subStr << "'" << endl << endl;
tokenizedStr->push_back( subStr );
prevLoc = loc+1;
} // while
вывод:
SUBSTR: 'This is a test string;23248h> w chars, aNn, 8132; ai3v2< 8&G'
SUBSTR: 'newline7iuf32 2f,f3rgb, 43q
efhfh
u2hef, wew; wg'
SUBSTR: 'efhfh
u2hef, wew; wg'
Обратите внимание, что во втором "SUBSTR" (по-видимому) по-прежнему есть символы новой строки ("\ n")
Скомпилированный код:
#include <vector.h>
#include <stdio.h>
#include <stdlib.h>
#include <string>
using namespace std;
int main(int argc, char *argv[]) {
string testStr = "This is a test string;23248h> w chars, aNn, 8132; ai3v2< 8&G,\nnewline7iuf32\t2f,f3rgb, 43q\nefhfh\nu2hef, wew; wg";
vector<string> tokenizedStr;
size_t loc, prevLoc = 0;
while( (int)(loc = testStr.find_first_of("\n", prevLoc) ) > 0) {
string subStr = testStr.substr(prevLoc, loc-1); // -1 to skip the \n
cout << "SUBSTR: '" << subStr << "'" << endl << endl;
tokenizedStr.push_back( subStr );
prevLoc = loc+1;
} // while
return 0;
}