提取整个字符串的序列(Arduino、C++、indexOf、子字符串)

Extracting a sequence of a whole string (Arduino, C++, indexOf, substring)

我想通过 Serial.println()[=26] 提取整个字符串的 任意部分 和 post =].

我遇到的来源问题是字符串值(A、B、C)是变量,因此"unknown"。它混淆了定义的终止符“-”和“END $”。我找不到合适的锚点来获取我想要的字符串的确切部分。我可以,如果这些字符串值不存在:"curD = 'Data: String1 A'" 与 "curD = 'String1'"。我只想 "String1 A"、"String2 B" 或 "String3 C".

示例 A、B、C 是整数、浮点数或 variable/random 长度的字符串。

这是我目前拥有的:

  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

如果那是正确的,为什么不使用 space 定界符 - 前提是输入始终是相同的格式(见上文),因此您可以按如下方式过滤:

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 中的字符串 class 并使用 char 数组。原理不变。