自行编写C语言函数来实现strtok函数的功能,尽可能接近该函数的用法以及效果
时间: 2024-01-01 08:04:07 浏览: 97
下面是一个自行编写的简化版strtok函数的实现,它可以接近原strtok函数的用法和效果:
```c
#include <stdio.h>
#include <stdbool.h>
#include <string.h>
char* my_strtok(char* str, const char* delim) {
static char* saved_ptr = NULL;
if (str != NULL) {
saved_ptr = str;
} else {
if (saved_ptr == NULL || *saved_ptr == '\0') {
return NULL;
}
}
char* token = saved_ptr;
while (*saved_ptr != '\0') {
if (strchr(delim, *saved_ptr) != NULL) {
*saved_ptr = '\0';
saved_ptr++;
break;
}
saved_ptr++;
}
return token;
}
int main() {
char msg[] = "Hello,World! This is a test message.";
char* token = my_strtok(msg, " ,!");
while (token != NULL) {
printf("%s\n", token);
token = my_strtok(NULL, " ,!");
}
return 0;
}
```
在这个示例中,my_strtok函数模拟了strtok函数的行为。它接受两个参数:第一个参数是要分割的字符串,第二个参数是分隔符字符串。
在函数内部,使用静态变量saved_ptr来保存当前分割的位置。如果传入的第一个参数不为NULL,则将saved_ptr指向该字符串,开始新的分割。否则,如果saved_ptr为NULL或者指向的字符为'\0',表示已经分割完毕,返回NULL。
接下来,函数使用一个循环来遍历字符串,当遇到分隔符字符时,将其替换为'\0',并将saved_ptr指向下一个字符。然后返回当前的token。
在主函数中,我们使用my_strtok函数来分割字符串msg,并将分割出来的token打印出来。
注意,这个自行编写的my_strtok函数并没有处理多线程安全性和可重入性等问题,它只是一个简化版的实现。在实际使用中,建议使用标准库提供的strtok函数。
阅读全文