使用strtok实现
时间: 2024-12-05 21:11:19 浏览: 26
`strtok`是C语言库中的一个函数,用于将字符串按照特定分隔符划分为一系列独立的“单词”。如果你想用`strtok`来提取类似"1.3.1"这样的子字符串,需要注意的是`strtok`本身并不适合处理这种包含小数点的连续数字的情况,因为它不会保留小数点。
不过,如果你的目标仅仅是获取每个"."分隔的完整部分,可以先使用`strtok`处理整个字符串,然后在循环中检查并截取直到遇到下一个`.`为止。但这里仍然需要额外的工作来确认得到的子字符串是否符合三位数的要求。以下是使用`strtok`的一个简化版示例,仅适用于提取连续的非小数点字符:
```c
#include <stdio.h>
#include <string.h>
int extract_string(char **tokens, const char *input, const char *delimiter) {
char *token = strtok(input, delimiter);
if (!token) {
return -1; // 如果没有找到分隔符,返回错误
}
int i = 0;
int length = strlen(token);
while (i < length && token[i] != '.') {
i++; // 只统计非小数点的字符
}
// 检查子字符串长度是否满足条件
if (i < 3) {
free(*tokens); // 释放已分配的内存
*tokens = NULL;
return -1;
}
// 将子字符串复制到新的内存块,并保存地址
*tokens = malloc((i + 1) * sizeof(char));
strncpy(*tokens, token, i);
(*tokens)[i] = '\0';
return i; // 返回有效子字符串的长度,可用于后续处理
}
int main() {
char input[] = "1.3.1.7.6";
char *temp_token;
int extracted_length;
temp_token = strtok(input, ".");
extracted_length = extract_string(&temp_token, input, ".");
if (extracted_length == 3) {
printf("提取的子字符串为:%s\n", temp_token);
} else {
printf("无法提取出长度为3的有效子字符串\n");
}
free(temp_token); // 一定要记得释放strtok生成的临时指针
return 0;
}
```
阅读全文