c++ - 如何在 Arduino 中将一个字符串拆分为另一个字符串?

标签 c++ arduino embedded c-strings

我有一个如下所示的字符数组:

char array[] = "AAAA... A1... 3. B1.";

如何在 Arduino 中用字符串 "..." 拆分这个数组?我试过:

ptr = strtok(array, "...");

输出如下:

AAAA,
 A1,
 3,
 B1

但我实际上希望输出是

AAAA,
A1,
3.B1.

如何得到这个输出?

编辑:

我的完整代码是这样的:

char array[] = "AAAA... A1... 3. B1.";
char *strings[10];
char *ptr = NULL;`enter code here` 

void setup()
{
       Serial.begin(9600);

       byte index = 0;
       ptr = strtok(array, "...");  // takes a list of delimiters
       while(ptr != NULL)
       {
            strings[index] = ptr;
            index++;
            ptr = strtok(NULL, "...");  // takes a list of delimiters
       }

       for(int n = 0; n < index; n++)
       {
          Serial.println(strings[n]);
       }
    }

最佳答案

主要问题是 strtok 在另一个字符串中找到一个字符串。 strtok 在字符串中查找字符。当您向 strtok 提供多个字符时,它会查找其中的任何。因此,编写 strtok(array, "..."); 与编写 strtok(array, "."); 完全相同。这就是为什么在“3”之后会出现 split 。

有多种方法可以做你想做的事。下面我将向您展示一个使用 strstr 的示例。与 strtok 不同,strstr 函数会在字符串中查找子字符串 - 正是您要查找的内容。但是.. strstr 不是分词器,因此需要一些额外的代码来打印子字符串。

应该这样做:

int main()
{
  char array[] = "AAAA... A1... 3. B1...";

  char* ps = array;
  char* pf = strstr(ps, "..."); // Find first substring
  while(pf)
  {
    int len = pf - ps;          // Number of chars to print
    printf("%.*s\n", len, ps);
    ps = pf + 3;
    pf = strstr(ps, "...");     // Find next substring
  }
  return 0;
}

关于c++ - 如何在 Arduino 中将一个字符串拆分为另一个字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54823307/

相关文章:

c++ - Makefile 自定义变量

debugging - Arduino : The system cannot find the file specified error

程序可以 self 修复(变量)吗? (安全关键环境)

c++ - 加速 FFTW 修剪以避免大量零填充

c++ - 使用 C++ 通过 RS232 在 pc 和 arduino 之间进行串行通信

c++ - 无法使用 MySQL Connector/C++ : exception thrown 从 C++ 程序连接到 MySQL 数据库

c - 使用零初始化数据使 ARM Fromelf 输出二进制

c - GCC 数组默认填充值

c++ - a 和 b 之间的数字(无排列)

c++ - C++类错误