Привет всем. В универе поставили задачу
Напишите функию которая находит сумму всех цифр входящих в заданную строку
Написал вот таку. вот функцию
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);
ну и естесственно не правильно работает со знаками типа -- или ---.. то есть двойным отрицинием.. ну это легко поправить.
покритикуйте пожалуйся, что может быть не так в функции?