我有一个如下所示的字符数组:
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/