将字符串拆分为标记并将其保存在数组中

时间:2013-03-18 08:19:01

标签: c split strtok

如何将字符串拆分为标记,然后将它们保存在数组中?

具体来说,我有一个字符串"abc/qwe/jkh"。我想分开"/",然后将令牌保存到数组中。

输出

array[0] = "abc"
array[1] = "qwe"
array[2] = "jkh"

请帮帮我

3 个答案:

答案 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不是编码服务,您可以自己编写。