//char messageToParse[] = "a b/c/d e f/g";
char messageToParse[] = "$GPGSA,A,3,04,05,,09,12,,,24,,,,,2.5,1.3,2.1*39";
const char* tokenSeparators = " ";
const char* itemSeparators = ",";
void handleItem(char* item) {
Serial.print("\t\t➜");
Serial.println(item);
}
void split(char* message, bool itemLevel = false) {
char * tokenPtr = nullptr;
char * startPtr = message;
if (itemLevel) Serial.write('\t');
Serial.print("parsing "); Serial.println(message);
do {
tokenPtr = strpbrk(startPtr, itemLevel ? itemSeparators : tokenSeparators);
if (tokenPtr != nullptr) {
char tmpChar = *tokenPtr;
*tokenPtr = '\0';
if (itemLevel) handleItem(startPtr); else split(startPtr, true);
*tokenPtr = tmpChar; // restore the string
startPtr = tokenPtr + 1; // get ready for the next token
} else if (itemLevel) handleItem(startPtr); else split(startPtr, true);
} while (tokenPtr != nullptr);
}
void setup() {
Serial.begin(115200); Serial.println();
split(messageToParse);
}
void loop() {}