用Linux实现strtok
时间: 2024-02-12 21:36:34 浏览: 64
350611906a#Linux#strtok函数使用介绍1
strtok是一个用于将字符串分割成一系列子字符串的函数。在Linux中,可以使用以下代码实现strtok函数:
```c
#include <stdio.h>
#include <string.h>
char *my_strtok(char *str, const char *delim) {
static char *last = NULL;
char *tok = NULL;
if (str) {
last = str;
}
if (!last) {
return NULL;
}
tok = last + strspn(last, delim);
last = tok + strcspn(tok, delim);
if (last == tok) {
return NULL;
}
last[0] = '\0';
last++;
return tok;
}
int main() {
char str[] = "Hello, world! This is a test.";
char *tok = my_strtok(str, " ,.!");
while (tok) {
printf("%s\n", tok);
tok = my_strtok(NULL, " ,.!");
}
return 0;
}
```
在这个例子中,my_strtok函数模拟了原生的strtok函数。它接受两个参数,第一个是要分割的字符串,第二个是分割符。它返回分割出的子字符串,如果没有更多的子字符串,则返回NULL。
在my_strtok函数中,我们使用了一个静态变量last,它用于跟踪上一个分割位置。如果传递了一个新的字符串,我们将last设置为该字符串的开头。如果last为空,则返回NULL。
我们使用strspn函数查找从last开始的第一个不在分割符集合中的字符,并指向该字符。然后,我们使用strcspn函数查找从tok指向的字符开始的第一个分割符,并将last指向该位置。
最后,我们使用null终止符将last指向的字符替换为null,并将last指向下一个字符的位置。这样,我们就可以重复调用my_strtok函数,返回下一个分割出的子字符串。
阅读全文