gpt4 book ai didi

c - 交换字符串内的数字

转载 作者:行者123 更新时间:2023-11-30 20:52:24 27 4
gpt4 key购买 nike

我有一个字符串,里面有:

2@0.88315@1@1.5005@true@0.112并且它继续下去......

我需要将每个 2 或更大的数字切换为 1,所以我写了这个:

for (i = 0 ; i < strlen(data) ; i++)
{
if (data[i] >= 50 && data[i] <= 57) // If it's a number
{
data[i] = '1'; // switch it to one
while (data[i] >= 48 && data[i] <= 57)
{
i++;
}
}
}

问题是,它也会将 0.051511 这样的数字变成 1.111111...因为它并不将 double 视为一个数字,而是将每个数字分开......我该怎么做 ?谢谢

最佳答案

为了澄清问题,因为尚不清楚,您需要以下输入:

"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"

其中一些子字符串不以表示 float 的字符串开头。您需要确定其中哪一个可以。为此,您可以尝试将每个字符串的前面解析为 float 。这可以通过 sscanf 来完成。解析 float 后,您将能够进行您想要的比较。

您正在尝试将字符串修改为不同的长度,因此当用“1”替换浮点值时,您需要检查原始值的长度。如果长度超过 1 个字符,则必须将后续字符向前移动。例如:

"3.423@1"

如果您解析第一个标记并发现它是 > 2,则可以将第一个字符替换为“1”。结果是:

"1.423@1"

然后,您仍然需要通过将字符串的其余部分向下移动来删除该标记的其余部分以获得:

"1@1"

关于c - 交换字符串内的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11020670/

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