C语言 在 C 中使用 strtok 使用多个分隔符拆分字符串
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/26597977/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Split string with multiple delimiters using strtok in C
提问by nocturne
I have problem with splitting a string. The code below works, but only if between strings are ' ' (spaces). But I need to split strings even if there is any whitespacechar. Is strtok()even necessary?
我在拆分字符串时遇到问题。下面的代码有效,但前提是字符串之间是 ' '(空格)。但即使有任何空白字符,我也需要拆分字符串。是strtok()甚至必要?
char input[1024];
char *string[3];
int i=0;
fgets(input,1024,stdin)!='#include <stdio.h>
#include<string.h>
int main(void)
{
char input[1024];
char *string[256]; // 1) 3 is dangerously small,256 can hold a while;-)
// You may want to dynamically allocate the pointers
// in a general, robust case.
char delimit[]=" \t\r\n\v\f"; // 2) POSIX whitespace characters
int i = 0, j = 0;
if(fgets(input, sizeof input, stdin)) // 3) fgets() returns NULL on error.
// 4) Better practice to use sizeof
// input rather hard-coding size
{
string[i]=strtok(input,delimit); // 5) Make use of i to be explicit
while(string[i]!=NULL)
{
printf("string [%d]=%s\n",i,string[i]);
i++;
string[i]=strtok(NULL,delimit);
}
for (j=0;j<i;j++)
printf("%s", string[i]);
}
return 0;
}
') //get input
{
string[0]=strtok(input," "); //parce first string
while(string[i]!=NULL) //parce others
{
printf("string [%d]=%s\n",i,string[i]);
i++;
string[i]=strtok(NULL," ");
}
回答by P.P
A simple example that shows how to use multiple delimiters and potential improvements in your code. See embedded comments for explanation.
一个简单的示例,展示了如何在代码中使用多个分隔符和潜在的改进。有关解释,请参阅嵌入的注释。
Be warned about the general shortcomings of strtok()(from manual):
请注意strtok()(来自手册)的一般缺点:
These functions modify their first argument.
These functions cannot be used on constant strings.
The identity of the delimiting byte is lost.
The
strtok()function uses a static buffer while parsing, so it's not thread safe. Usestrtok_r()if this matters to you.
这些函数修改它们的第一个参数。
这些函数不能用于常量字符串。
定界字节的标识丢失。
该
strtok()函数在解析时使用静态缓冲区,因此它不是线程安全的。使用strtok_r()如果这个问题给您。
##代码##

