自己实现一个strtok函数
时间: 2024-04-30 20:20:59 浏览: 89
strtok函数是用来将一个字符串分割成若干子串的函数,其原型为:
```c++
char* strtok(char* str, const char* delim);
```
其中,第一个参数str是要分割的字符串,第二个参数delim是分割符。函数返回值是被分割的第一个子串,下一次再调用时将str指针设置为NULL,表示继续从上一次结束的位置继续分割。
下面是一个简单的自己实现的strtok函数:
```c++
#include <iostream>
#include <cstring>
using namespace std;
char* strtok_impl(char* str, const char* delim) {
static char* ptr = NULL; // 保存上一次分割的位置
if (str != NULL) {
ptr = str;
}
if (ptr == NULL) {
return NULL;
}
char* ret = ptr; // 返回值
while (*ptr != '\0') {
bool is_delim = false;
for (const char* p = delim; *p != '\0'; p++) {
if (*ptr == *p) {
is_delim = true;
break;
}
}
if (is_delim) {
*ptr = '\0';
ptr++;
break;
}
ptr++;
}
if (*ptr == '\0') {
ptr = NULL;
}
return ret;
}
int main() {
char str[] = "hello,world!how are you?";
char* p = strtok_impl(str, ", !?");
while (p != NULL) {
cout << p << endl;
p = strtok_impl(NULL, ", !?");
}
return 0;
}
```
这里使用了一个静态变量`ptr`来保存上一次分割的位置,如果第一次调用函数,则将`str`赋值给`ptr`,如果上一次分割已经到达字符串末尾,则将`ptr`置为NULL。
阅读全文