gpt4 book ai didi

c - 是否有 strsep() 函数的 Windows 变体?

转载 作者:可可西里 更新时间:2023-11-01 14:38:35 25 4
gpt4 key购买 nike

我正在尝试解析具有一些 参数的定界字符串。

示例:

"|One|two|three||octopus|garbagecan||cartwheel||||"

基本上我需要能够通过 id 提取任何段,如果该段为空则返回 null

strtok() 不处理空字段,看起来像基于 *nix 的系统有 strsep()。有人知道 Windows 是否有类似的东西吗?如果可以的话,我想尽量避免编写一个函数来处理这个问题。

最佳答案

只需使用它的描述来编写函数,它并不复杂:

#include <stddef.h>
#include <string.h>
#include <stdio.h>

char* mystrsep(char** stringp, const char* delim)
{
char* start = *stringp;
char* p;

p = (start != NULL) ? strpbrk(start, delim) : NULL;

if (p == NULL)
{
*stringp = NULL;
}
else
{
*p = '\0';
*stringp = p + 1;
}

return start;
}

// Test adapted from http://www.gnu.org/s/hello/manual/libc/Finding-Tokens-in-a-String.html.

int main(void)
{
char string[] = "words separated by spaces -- and, punctuation!";
const char delimiters[] = " .,;:!-";
char* running;
char* token;

#define PRINT_TOKEN() \
printf("token: [%s]\n", (token != NULL) ? token : "NULL")

running = string;
token = mystrsep(&running, delimiters); /* token => "words" */
PRINT_TOKEN();
token = mystrsep(&running, delimiters); /* token => "separated" */
PRINT_TOKEN();
token = mystrsep(&running, delimiters); /* token => "by" */
PRINT_TOKEN();
token = mystrsep(&running, delimiters); /* token => "spaces" */
PRINT_TOKEN();
token = mystrsep(&running, delimiters); /* token => "" */
PRINT_TOKEN();
token = mystrsep(&running, delimiters); /* token => "" */
PRINT_TOKEN();
token = mystrsep(&running, delimiters); /* token => "" */
PRINT_TOKEN();
token = mystrsep(&running, delimiters); /* token => "and" */
PRINT_TOKEN();
token = mystrsep(&running, delimiters); /* token => "" */
PRINT_TOKEN();
token = mystrsep(&running, delimiters); /* token => "punctuation" */
PRINT_TOKEN();
token = mystrsep(&running, delimiters); /* token => "" */
PRINT_TOKEN();
token = mystrsep(&running, delimiters); /* token => NULL */
PRINT_TOKEN();

return 0;
}

关于c - 是否有 strsep() 函数的 Windows 变体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8512958/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com