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

问题描述 投票:0回答:1

我想提取整个字符串的任意部分并通过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);

谢谢:)

无限制

c++ string arduino substring indexof
1个回答
0
投票

输入:

"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数组。原理保持不变。

© www.soinside.com 2019 - 2024. All rights reserved.