使用Arduino获取2个字符串之间的字符串

时间:2016-11-04 14:52:01

标签: string arduino

我正在寻找一种使用Arduino在2个字符串之间获取字符串的方法。这是源字符串:

Hello, my name is John Doe# and my favourite number is 32#.

输出必须是:

String name = "John Doe"; //Between "name is " and "#"
String favouriteNumber = "32"; //Between "number is " and "#"

如何通过Arduino实现这一目标?

我无法在网上找到有关此内容的任何信息。无论如何,C的这些例子都不起作用。我知道在Arduino中不建议使用String,但我必须这样做才能使事情变得更简单。

顺便说一句,这种使用'#'表示数据结束的方法并不是理想的方法,因为我希望输入更具人性化和更自然。 有人会建议另外一种方法吗?

提前致谢!

2 个答案:

答案 0 :(得分:2)

函数midString找到两个其他字符串之间的子字符串" start"并且"完成"。如果这样的字符串不存在,则返回""。还包括测试代码。

void setup() {
  test();
}

void loop() {
  delay(100);
}

String midString(String str, String start, String finish){
  int locStart = str.indexOf(start);
  if (locStart==-1) return "";
  locStart += start.length();
  int locFinish = str.indexOf(finish, locStart);
  if (locFinish==-1) return "";
  return str.substring(locStart, locFinish);
}

void test(){
  Serial.begin(115200);
  String str = "Get a substring of a String. The starting index is inclusive (the corresponding character is included in the substring), but the optional ending index is exclusive";
  Serial.print(">");
  Serial.print( midString( str, "substring", "String" ) );
  Serial.println("<");
  Serial.print(">");
  Serial.print( midString( str, "substring", "." ) );
  Serial.println("<");
  Serial.print(">");
  Serial.print( midString( str, "corresponding", "inclusive" ) );
  Serial.println("<");
  Serial.print(">");
  Serial.print( midString( str, "object", "inclusive" ) );
  Serial.println("<");
 }

答案 1 :(得分:-1)

刚刚搜索过这个并没有找到答案所以我做了一个。 我更喜欢使用String,因为代码可读性和简单性。 对我来说,比从我的arduino中挤出最后一滴果汁更重要。

String name = GetStringBetweenStrings("Hello, my name is John Doe# and my favourite number is 32#." ,"name is ","#");



String GetStringBetweenStrings(String input, String firstdel, String enddel){
      int posfrom = input.indexOf(firstdel) + firstdel.length();
      int posto   = input.indexOf(enddel);
      return input.substring(posfrom, posto);
}

注意第一个案例的罚款,但对于第二个案例,你必须将第二个过滤器sting改为“#”。所以它不会使用第一次出现的#