【发布时间】:2021-11-20 21:34:03
【问题描述】:
我正在学习 c 并且在这个问题上遇到困难。 我正在编写一个获取包含正整数的字符串的函数。
该函数将该整数减去 1 并将获得的值放入字符串中。
但我现在的问题是
例如当输入为“1000”时,我希望输出为“999”。不是“0999”。 输入“100”,我希望输出为“99”,而不是“099”。所以我将在这个函数的末尾去掉第一个 0。 如何摆脱字符串的第一个元素??
感谢任何反馈!非常感谢。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void str_subtract_one(char* num) {
int len = 0;
int i ;
for (i=0; num[i]!='\0';i++){
len++;
}
int j;
for (j = len;j !=0;j--){
if (len != '0'){
if (num[j-1]=='9'){
num[j-1] = '8';
break;
}
else if (num[j-1]=='8'){
num[j-1] = '7';
break;
}
else if (num[j-1]=='7'){
num[j-1] = '6';
break;
}
else if (num[j-1]=='6'){
num[j-1] = '5';
break;
}
else if (num[j-1]=='5'){
num[j-1] = '4';
break;
}
else if (num[j-1]=='4'){
num[j-1] = '3';
break;
}
else if (num[j-1]=='3'){
num[j-1] = '2';
break;
}
else if (num[j-1]=='2'){
num[j-1] = '1';
break;
}
else if (num[j-1]=='1'){
num[j-1] = '0';
break;
}
else if (num[j-1]=='0'){
num[j-1] = '9';
}
}
}
if (num[0] =='0')
//I dont know how to get rid of the first 0 here.
}
int main() {
char nums[] = "10000";
str_subtract_one(nums);
printf("\nQ5\nstr_subtract_one function result; %s\n",nums);
return 0;
}
【问题讨论】:
-
与其一直使用字符串,不如将字符串转换为 int,对 int 进行数学运算,然后再转换回字符串。
-
但也要注意那个大的
if...else块是可怕的。'0'需要一个特殊情况,但对于任何和所有其他数字,num[j-1] -= 1都可以完成这项工作。 -
另外
len != '0'并不意味着您似乎认为它意味着什么。我想len != 0不同,这就是你的想法。 -
如果你用
char nums[] = "0";调用它的预期结果是什么? -
@TedLyngmo:我已经在my answer to OP's previous question 中解决了这个问题。不过,您再次提出这个问题仍然是合适的。