【问题标题】:simple way to split string based on delimiter in arduino在arduino中基于分隔符拆分字符串的简单方法
【发布时间】:2020-06-18 14:07:06
【问题描述】:

我有一个字符串,我想根据 | 拆分它所以我可以在需要时调用该部分,请查看下面的示例

String test= "first|Second|third";

那么我该如何使用呢

string1="first";

string2="second";

string3="third";

或单词[0],单词[1],单词[2]

我不知道该尝试什么,因为我是 arduino 的新手

在 php 中我会这样做:explode("|", test) 所以我希望我的问题很清楚

【问题讨论】:

  • 您是否安装了Arduino STL 和/或this 是否回答了您的问题?
  • String 类是否有任何方法可以在字符串中查找字符并返回位置? String 类有子字符串方法吗?
  • 您可以使用 toCharArray() 方法将 if 转换为 char 数组,然后使用 strtok
  • 这个问题和 Lua 有什么关系?

标签: c++ c lua arduino


【解决方案1】:

我在我的 Arduino 上测试了以下代码,它可以工作。您需要对其进行修改以满足您的需要。

我建议不要使用 Arduino String 库,因为它使用动态内存,并且由于内存不足或内存碎片,可能会导致程序意外崩溃。在只有 2K RAM 的微控制器上,固定大小的缓冲区肯定更好。

void setup()
{
  Serial.begin(9600);
  int i;
  char delimiter[] = "|";
  char *p;
  char string[128];
  String test = "first|Second|third";
  String words[3];

  test.toCharArray(string, sizeof(string));
  i = 0;
  p = strtok(string, delimiter);
  while(p && i < 3)
  {
    words[i] = p;
    p = strtok(NULL, delimiter);
    ++i;
  }

  for(i = 0; i < 3; ++i)
  {
    Serial.println(words[i]);
  }
}

void loop() {
}

【讨论】:

  • Arduino String 对象从来都不是必需的,这里它们是问题的一部分。
  • 是的,我同意,但 OP 是这样要求的。
【解决方案2】:

Arduino 的资源非常有限,C 字符串在这种环境下要好得多。如果您不需要保留原始字符串,我通常会修改该字符串。

char **split(char **argv, int *argc, char *string, const char delimiter, int allowempty)
{
    *argc = 0;
    do
    {
        if(*string && (*string != delimiter || allowempty))
        {
            argv[(*argc)++] = string;
        }
        while(*string && *string != delimiter) string++;
        if(*string) *string++ = 0;
        if(!allowempty) 
            while(*string && *string == delimiter) string++;
    }while(*string);
    return argv;
}

int main()
{
    char str[] = "first||Second|||third";
    char str1[] = "first||Second|||third";
    char *argv[8];
    int argc;

    split(argv, &argc, str, '|', 0);
    for(int i = 0; i < argc; i++) printf("argv[%d] = %s\n", i, argv[i]);
    printf("-----------------\n");
    split(argv, &argc, str1, '|', 1);
    for(int i = 0; i < argc; i++) printf("argv[%d] = %s\n", i, argv[i]);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-08
    • 1970-01-01
    • 2011-11-28
    • 2014-03-13
    • 1970-01-01
    • 2021-12-17
    • 2012-02-27
    • 1970-01-01
    相关资源
    最近更新 更多