使用我的程序,我需要将包含的数字返回到字符串中 我的程序似乎工作,但可以肯定,我需要显示数字。事情是,它似乎陷入了ascii 例如,如果我的号码是12,我只能显示1068 我想提示能够显示(使用printf或write函数)字符串" abcd12"中包含的数字。 无论如何,这是我的程序(通常显示nbr的值,每次迭代的迭代次数,以及他的最终值到主体中):
int my_getnbr(char const *str) {
int i = 0;
int nbr;
int power = 1;
while (str[i] != '\0') {
if (str[i] <= '9' && str[i] >= '0') {
nbr = nbr * power + str[i] + '0';
printf("%d\n", nbr);
power = power * 10;
}
i++;
}
return (nbr);
}
int main() {
int nbr;
nbr = my_getnbr("abcd12");
printf("nbr = %d\n", nbr);
return (0);
}
答案 0 :(得分:1)
你的概念很好,只是稍作微调。
nbr
。将它初始化为零,这样你就有了一个已知的起点。power
。只需将每次迭代乘以10即可。关键细节:'0'
是 ASCII字符。如果转换为整数,则恰好是数字48.尝试:
nbr = nbr * 10 + str[i] - '0';
很清楚意图,硬编码意思而不是值,并且应该让你超越终点线。
小调:
为了清晰代码,建议在比较范围值时像数学家一样思考。
if (str[i] <= '9' && str[i] >= '0') {
这没有错,但是如果它是一个ASCII数字,那么需要精神上的第二个说#34;啊。然而,如果您重新排序如下:
if ('0' <= str[i] && str[i] <= '9') {
对称性更自然,在视觉上放置您在边界之间测试的变量。在轶事经历中,一个小细节很重要。
答案 1 :(得分:-1)
可以简化为:
nbr = 0;
while (*str) {
if (isdigit(*str))
{
nbr *= 10;
nbr += *str++ - '0';
}
}