繁体   English   中英

写一个 function 从 c 中的字符串中减去一个

[英]writing a function that subtract one from string in c

我在学校学习 C 并且正在做一个项目,该项目涉及编写一个函数( str_subtract_one ),该函数获取包含正数 integer 的字符串。

function 从 integer 中减去1 ,并将获得的值放入字符串中。

在下面的代码中,我成功地编写了一个 function 来做到这一点,但问题是输入数字可能大于intlonglong long的最大值,所以我不应该尝试将字符串转换为 integer。

那么,如果不将字符串转换为intlonglong 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM