为了澄清这个问题,因为它不清楚,您需要以下输入:
"2@0.88315@1@1.5005@true@0.112"
修改为如下:
"1@0.88315@1@1@true@0.112"
您的问题是您需要将每个数字解析为浮点值以进行任何类型的比较。要么这样,要么您需要通过检查“。”来手动解析它。特点。由于 C 标准库提供了可以帮助您的函数,因此手动执行此操作是僵化的、容易出错且不必要的。
由于这是家庭作业,因此我将为您提供一些有关如何解决此问题而不是实际解决方案的提示。您应该做的是尝试使用这些步骤编写解决方案,如果遇到困难,请使用您编写的代码编辑原始问题、失败的地方以及您认为失败的原因。
您的第一步是将输入标记为以下内容:
"2"
"0.88315"
"1"
"1.5005"
"true"
"0.112"
这可以通过遍历字符串并拆分它或使用指针来完成,然后出现“@”字符。拆分字符串可以使用strtok
. 但是,strtok
将通过修改字符串来拆分字符串,这在我们的情况下不一定需要。更简单的方法是简单地遍历字符串并在每次到达“@”字符后停止。然后输入将被标记为以下内容:
"2@0.88315@1@1.5005@true@0.112"
"0.88315@1@1.5005@true@0.112"
"1@1.5005@true@0.112"
"1.5005@true@0.112"
"true@0.112"
"0.112"
其中一些子字符串不以表示浮点数的字符串开头。您将需要确定他们中的哪一个。为此,您可以尝试将每个字符串的前面解析为浮点数。这可以通过sscanf
. 解析浮点数后,您将能够进行所需的比较。
您正在尝试将字符串修改为不同的长度,因此在将浮点值替换为“1”时,您需要检查原始值的长度。如果它长于 1 个字符,则必须将后续字符向前移动。例如:
"3.423@1"
如果您解析第一个标记并发现它是> 2
,则将第一个字符替换为“1”。这导致:
"1.423@1"
然后,您仍然需要通过将字符串的其余部分向下移动来删除该标记的其余部分以获得:
"1@1"