将ISBN字符串转换为数字

时间:2014-01-22 01:25:55

标签: c while-loop

此代码从字符串中删除(忽略)“-”,但只删除一次。 在我更改了ISBN字符串后,如何重置*p让它再次循环?

char ISBN[] = "3-423-62167-2";
char *p = ISBN;
while (*p)
{
    if (isdigit(*p))
    {
        const char digit = *p - '0';
        num = (num * 10) + digit;
    }
    ++p;
}

//New char ISBN[] = "3-446-19313-8" and start from beginning

1 个答案:

答案 0 :(得分:2)

将代码包装为函数:

int strtoisbn(char const *str)
{
    int isbn = 0;
    unsigned char c;
    while ((c = *str++) != '\0')
    {
        if (isdigit(c))
            isbn = isbn * 10 + (c - '0');
    }
    return isbn;
}

然后使用它:

int isbn1 = strtoisbn("3-423-62167-2");
int isbn2 = strtoisbn("3-446-19313-8");

您需要担心使用int作为数据类型(特别是对于13位ISBN);您可能需要long longint64_t或其无符号变体。您还必须担心10位ISBNX校验位;这些不是13位ISBN的因素。

如果你还不能写函数,那么(a)学习如何,以及(b)重新初始化p以指向新的ISBN:

p = ISBN2;

然后再次运行相同的代码。但是两次编写相同的代码表明你可能需要编写一个函数来完成这项工作。