gpt4 book ai didi

c - 结果在字符串到整数之间的转换期间减 1(并且仅具有特定的字符串长度值)

转载 作者:太空宇宙 更新时间:2023-11-04 01:54:03 26 4
gpt4 key购买 nike

我正在用 C 语言编写一个程序,仅当该字符串的第一个字符是减号时,该程序才将 n 个字符的字符串转换为整数。程序如下:

#include <string.h>
#include <stdio.h>
#include <math.h>

int StringToInt(char *string){
int i=0;
int integer=0;
int length = strlen(string);
if (string[0]=='-'){
for (i=1; i<length; i++){
integer += (string[i]-48)*pow(10, (length-1-i));
}return (integer*(-1));
}else{
return 0;
}
}

当我用一个字符串长度为奇数的字符串调用上面的函数时,我的程序工作正常,否则它返回正确的值但减一。现在,我将通过一个示例使其更加清晰:假设我创建了一个名为“Number”的字符串,并为其分配了数字“-234”。如果我们把这个字符串放在上面的函数中,字符串的长度将被计算为 4。这种情况下的函数不会返回 -234,而是 -233。如果不是 -234,而是我为字符串分配了一个数字,如“-1456”,该函数将返回正确的数字。

最佳答案

我很确定这只是舍入误差。当您将 0.999999 转换为 int 时,您会得到 0。因此,任何导致类似 2047.999999 的数字的浮点错误都将被解释为 2047,而不是更准确的 2048,后者看起来像是减 1。

作为John Bollinger在评论中建议,只需将每个字符添加到当前值的 10 倍:

#include <string.h>
#include <stdio.h>

int string_to_int(char *string) {
int i=0;
int integer=0;
int length = strlen(string);
if (string[0] == '-') {
for (i=1; i<length; i++) {
integer = 10 * integer + string[i]-'0';
}

return -integer;
} else {
return 0;
}
}

int main(int argc, char **argv) {
if (argc < 2)
return 1;

printf("Result: %d\n", string_to_int(argv[1]));
return 0;
}

我更喜欢说“0”而不是 48,因为它阐明了您的意图(将字符转换为它所代表的数字)。

关于c - 结果在字符串到整数之间的转换期间减 1(并且仅具有特定的字符串长度值),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37707820/

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