【发布时间】:2021-03-25 02:35:19
【问题描述】:
我正在从一个遵循以下模式的文本文件中读取信息:Id、JobTitle、BasePay、OvertimePay、Benefit、Status。每个部分由制表符分隔。下面是一行的示例:
81387 Architectural Associate 114146.55 0 0 FT
但是,有些行缺少基本工资,而是有两个制表符,因此看起来像:
81392 Deputy Chief 0 149934.11 FT
当我使用带有“\t”作为分隔符的 strtok 时,它会自动跳过此处的两个制表符并直接变为 0,即 OvertimePay。这是我使用的代码(“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。使用
strchr等其他方式来查找下一个选项卡。如需进一步帮助,请显示“我已尝试在字符串中搜索两个相邻的制表符”的实际代码。 -
如您所见,
strtok不适用于您的用例 - 它会跳过多个连续的分隔符实例。请展示您尝试过的其他方式。