如何将字符串拆分为标记,然后将它们保存在数组中?
具体来说,我有一个字符串"abc/qwe/jkh"
。我想分开"/"
,然后将令牌保存到数组中。
输出
array[0] = "abc"
array[1] = "qwe"
array[2] = "jkh"
请帮帮我
答案 0 :(得分:26)
#include <stdio.h>
#include <string.h>
int main ()
{
char buf[] ="abc/qwe/ccd";
int i = 0;
char *p = strtok (buf, "/");
char *array[3];
while (p != NULL)
{
array[i++] = p;
p = strtok (NULL, "/");
}
for (i = 0; i < 3; ++i)
printf("%s\n", array[i]);
return 0;
}
答案 1 :(得分:9)
您可以使用strtok()
char string[]= "abc/qwe/jkh";
char *array[10];
int i=0;
array[i] = strtok(string,"/");
while(array[i]!=NULL)
{
array[++i] = strtok(NULL,"/");
}
答案 2 :(得分:0)
strtok()
是个坏主意请勿在常规代码中使用strtok()
,strtok()
使用static
变量会带来一些问题。在嵌入式微控制器上有一些用例,其中static
变量有意义,但在大多数其他情况下避免使用它们。当多个线程使用strtok()
时,在中断中使用它或在其他情况下,在连续调用strtok()
之间处理多个输入时,#include <stdio.h>
#include <string.h>
//Splits the input by the / character and prints the content in between
//the / character. The input string will be changed
void printContent(char *input)
{
char *p = strtok(input, "/");
while(p)
{
printf("%s, ",p);
p = strtok(NULL, "/");
}
}
int main(void)
{
char buffer[] = "abc/def/ghi:ABC/DEF/GHI";
char *p = strtok(buffer, ":");
while(p)
{
printContent(p);
puts(""); //print newline
p = strtok(NULL, ":");
}
return 0;
}
的行为异常。
考虑以下示例:
abc, def, ghi,
ABC, DEF, GHI,
您可能期望输出:
abc, def, ghi,
但是你会得到
strtok()
这是因为您在printContent()
中调用strtok()
时处于main()
中生成的strtok()
的内部状态。返回后,strtok()
的内容为空,并且对NULL
的下一次调用返回strtok_r()
。
使用POSIX系统时可以使用static
,此版本不需要strtok_r()
变量。如果您的库未提供self.webview.uiDelegate = self
webview.load(URLRequest.init(url: URL.init(string: 'url here')!))
,则可以编写自己的版本。这应该不难,而且Stackoverflow不是编码服务,您可以自己编写。