Усовершенствованный модифицированный atoi? вопрос
От: r1der Россия  
Дата: 13.10.09 10:53
Оценка: -2
Привет всем. В универе поставили задачу
Напишите функию которая находит сумму всех цифр входящих в заданную строку

Написал вот таку. вот функцию

int atoisum(const char *s)
{
        static const char digits[] = "0123456789"; 
        unsigned val=0;
        int neg=0;
        const char *where;
        unsigned int digit;

        /* начинаем цикл обработки */
        while (*s) {
             //пропускаем пробелы и буквы при этом проверяем чтобы указатель не вышел за пределы
            while (*s&&(*s==' ' || *s=='\t' || isalpha(*s)))  s++;
            //если указатель достиг нулевого терминатора останавливаем работу цикла считывания
            if (!*s) break;
             /* проверяем знак */
           if (*s=='-') {
                   neg=1;
                  s++;
           }
           else if (*s=='+') {
                s++;
           }
           
            //где найдена цифра
                 where = strchr(digits, *s);
                 //не найдена переходим к следующей итерации 
                 //снова пропускаем все пробелы и символы итд
                 //сделано на всякий случай вдруг непредвиденный символ, просто пропускаем его
                 //типа =-%?
                 if (where==NULL) {
                         s++; continue;
                 }

                digit = (where - digits);
                val += digit;
                s++;

       }

 
         if (neg) {
                 return -val;
         }

         return val;
}


почему то неправильно обрабатывает русские символы
вот пример использования

char * ch="    w546u6y+=% 5   a  rtj - 4  sr  tj  s%55 kjbi8lugiu";
cout<<atoisum(ch);


ну и естесственно не правильно работает со знаками типа -- или ---.. то есть двойным отрицинием.. ну это легко поправить.
покритикуйте пожалуйся, что может быть не так в функции?
icq 314624
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.