[英]writing a function that subtract one from string in c
我在学校学习 C 并且正在做一个项目,该项目涉及编写一个函数( str_subtract_one
),该函数获取包含正数 integer 的字符串。
function 从 integer 中减去1
,并将获得的值放入字符串中。
在下面的代码中,我成功地编写了一个 function 来做到这一点,但问题是输入数字可能大于int
、 long
或long long
的最大值,所以我不应该尝试将字符串转换为 integer。
那么,如果不将字符串转换为int
、 long
或long long
,我该如何做同样的工作呢?
我感谢任何反馈。 太感谢了。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void str_subtract_one(char* num) {
char *end; // to use it in strtol function,
long long as_long = strtoll(num,&end,10); //to convert string to long, use strtol.
sprintf(num, "%lld", as_long - 1); // to convert long into string and now num has a string value
}
int main() {
char nums[] = "2462343434344545";
str_subtract_one(nums);
printf("\nstr_subtract_one function result; %s\n",nums);
return 0;
}
例如,如果输入字符串是"2323"
,它应该是 output "2322"
。
如"1000"
, output "999"
等
您可以使用以下算法:
'9'
,那么您可以将其更改为'8'
。'8'
,那么您可以将其更改为'7'
。'7'
,那么您可以将其更改为'6'
。'0'
,则将其更改为'9'
并用下一个数字重复上述所有操作。 如果数字用完(如果所有数字都是'0'
就会发生这种情况),则必须用新字符串"-1"
覆盖整个字符串。 这只有在至少为字符串分配了 3 个字节的情况下才有效,否则将没有足够的空间来写入结果,而不会导致缓冲区溢出。 例如,如果你写
char nums[] = "0";
然后尝试将"-1"
写入字符串将越界写入数组,导致未定义的行为(您的程序可能会崩溃)。
因此,如果要确保有空间写入"-1"
,则必须改为编写以下内容:
char nums[3] = "0";
请注意,此算法仅适用于正数。 (在你的问题中,你说我们可以假设这些数字是正数。)
如果您希望它也适用于负数,则必须首先检查数字的符号,然后应用适当的算法。 您将需要一种处理正数的算法和一种处理负数的算法(尽管您可能想尝试将它们组合成一个算法)。
根据家庭作业问题的社区指南,我目前不会为您的问题提供完整的解决方案。 但是,如果需要,我可以稍后添加代码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.