使用制表符拆分字符串但缺少某些信息

Split Strings with Tabs but Some Info is Missing

我正在从遵循以下模式的文本文件中读取信息:Id、JobTitle、BasePay、OvertimePay、Benefit、Status。每个部分由制表符分隔。下面是一行的示例:

81387   Architectural Associate 114146.55   0   0   FT

但是,有些行缺少基本工资,而是有两个制表符,因此它看起来像:

81392   Deputy Chief        0   149934.11   FT

当我使用带有“\t”作为分隔符的strtok 时,它会自动跳过此处的两个制表符并直接转到0,即Ove​​rtimePay。这是我使用的代码(“current”是我用来存储每条信息的结构,并且 ptr 已经被定义为一个 char 数组):

ptr = strtok(salaryLine, delim);    // This gives us ID, which we already have. Skip this
ptr = strtok(NULL, delim);
strcpy(current.title, ptr);
ptr = strtok(NULL, delim);
current.basePay = strtod(ptr, &empty);   // This is a problem because it takes OvertimePay instead if BasePay is missing
ptr = strtok(NULL, delim);
current.overtimePay = strtod(ptr, &empty);
ptr = strtok(NULL, delim);
current.benefit = strtod(ptr, &empty);
ptr = strtok(NULL, delim);
strtok(ptr, "\n");  // Remove newline character
strcpy(current.status, ptr);

有没有一种方法可以像那样标记字符串。具体来说,如何在文件中找到没有BasePay的字符串呢?我已经尝试在字符串中搜索彼此相邻的两个制表符,但没有成功。

char* temp = strstr(ptr, "\t\t");
            
if (ptr == NULL)
{
    printf("It's null");
}
            
else
{
    printf("It found it");
}

提前致谢。

使用多分隔符没有区别。 strtok(ptr, "\t") 与 strtok(ptr, "\t\t").

相同

在那种情况下,我更喜欢内部带有 memcpy(s, p1, p2-p1) 的“p2 = strchr(p1, '\t')”循环。

顺便说一句,strtok 不可重入。使用(顺便说一句:可重入与多线程无关。strtok 已经打破了嵌套循环。可以使用 strtok_r 但它不那么便携。)