我想提取整个字符串的任意部分并通过Serial.println()发布。
我遇到的源问题是字符串值(A,B,C)是变量,因此是“未知的”。它与定义的终止符“-”和“ END $”混淆。我找不到合适的锚点来获取我想要的字符串的确切部分。如果没有这些字符串值,我可以:“ curD ='数据:String1 A'”与“ curD ='String1'”。我只想拥有“ String1 A”,“ String2 B”或“ String3 C”。
示例A,B,C可以是int,float或可变/随机长度的字符串。
这是我到目前为止所拥有的:
char headComputerData[] = "String1 - "; // test; can be String1 -, String2 - etc, to get the next adjacent string sequence till " -"
//char headComputerData[] = "Computer Data: "; // the prefix of the data value
char dashTerminator[] = " -"; // one possible suffix of a value
char dollarTerminator[] = " END $ "; // the other possible suffix of a value
int firstIndexComputerData; // index into inputStringPC of the first char of the value
String inputStringPC = "Computer Data: String1 A - String2 B - String3 C END $ ";
firstIndexComputerData = inputStringPC.indexOf(headComputerData);
firstIndexComputerData += strlen(headComputerData); // firstIndex is now the index of the char just past the head.
String compData = inputStringPC.substring// string everything between
(
firstIndexComputerData, //first index
inputStringPC.indexOf(dashTerminator, firstIndexComputerData) //last index (relative)
);
Serial.println(compData);
谢谢:)
无限制
输入:
"Computer Data: String1 A - String2 B - String3 C END $ "<br>
0 1 2 3 4 5 6 7 8 9 10
输出应为
String1 A
String2 B
String3 C
如果没错,为什么不使用空格分隔符-前提是输入始终是相同的格式(请参见上文),因此您可以按以下方式进行过滤:
uint8_t spaceIndex [11] = {}; // we store 10 values + 0 terminator
String inputStringPC = "Computer Data: String1 A - String2 B - String3 C END $ ";
for (uint8_t i = 0; i<10; i++){ // we read 10 space delimiter indices into an array
if (i != 0) spaceIndex[i] = inputStringPC.indexOf(' ', spaceIndex[i-1] );
else spaceIndex[i] = inputStringPC.indexOf(' ');
}
// Extract the relevant data as strings (indexStart + 1 / indexEnd - 1)
String Astring = inputStringPC.substring (spaceIndex[1] + 1, spaceIndex[3] -1);
String Bstring = inputStringPC.substring (spaceIndex[4] + 1, spaceIndex[6] -1);
String Cstring = inputStringPC.substring (spaceIndex[7] + 1, spaceIndex[9] -1);
如果我正确解释了您的问题,这将提供结果。提示:摆脱Arsuino中的字符串类,并使用char数组。原理保持不变。