2014-01-22 4 views
0

Этот код удаляет (игнорирует) «-» из строки, но только один раз. Как я могу сбросить *p, чтобы повторить цикл, после того, как я изменил строку ISBN?Преобразование строк ISBN в номера

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 
+0

http://stackoverflow.com/q/9895216 –

+0

Оберните код как функцию: '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 long' или' int64_t'. Возможно, вам также придется беспокоиться о контрольной цифре 'X' для 10-значных ISBN. –

+0

@RobertHarvey: Я думаю, что ваш x-ref имеет дело с другой проблемой вообще. Я вижу поверхностные отношения, но я считаю, что это повторное использование фрагмента кода для преобразования двух номеров ISBN. –

ответ

2

Wrap код в виде функции:

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 long или int64_t или неподписанный вариант. Вам также нужно беспокоиться о контрольной цифре X для 10-значного ISBN s; они не являются фактором в 13-значных ISBN.

Если вы не можете писать функции еще, то (а) научиться, и (б) переинициализировать p, чтобы указать на новый ISBN:

p = ISBN2; 

, а затем запустить один и тот же код. Но дважды писать один и тот же код - это указание на то, что вам, вероятно, нужно написать функцию для выполнения задания.

Смежные вопросы