用strtok_r写一个句子解析函数,用空格作为分隔符
时间: 2024-09-20 20:16:41 浏览: 48
`strtok_r`是C语言标准库中的一个线程安全版本的字符串分割函数,它可以在多个线程之间共享一个字符指针,避免了全局变量带来的数据竞争问题。下面是一个简单的例子,展示如何用`strtok_r`编写一个句子解析函数,将句子按照空格分割成单词:
```c
#include <stdio.h>
#include <string.h>
// 定义结构体保存状态,包括当前处理的位置和分隔符
typedef struct {
char *token;
const char *delim;
} strTokState;
// 解析函数,传入原始字符串、初始指针和状态结构体
char *parse_sentence(const char *sentence, char **state) {
char *ret = strtok_r(*state, " ", &state); // 使用空格作为分隔符
if (ret == NULL) { // 如果已经到达结束,返回NULL表示结束
return NULL;
}
// 返回当前的单词,并更新状态指针
return ret;
}
int main() {
const char *sentence = "Hello, World! This is a test sentence.";
strTokState state;
state.token = sentence;
while ((state.token = parse_sentence(sentence, &state))) {
printf("Token: %s\n", state.token);
}
return 0;
}
```
在这个示例中,`parse_sentence`函数会不断从输入的`sentence`中提取单词,直到遇到句尾或再次遇到空格为止。每次调用都会更新`state.token`,直到`strtok_r`返回`NULL`。
阅读全文