Привет всем. В универе поставили задачу
Напишите функию которая находит сумму всех цифр входящих в заданную строку
Написал вот таку. вот функцию
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
Re: Усовершенствованный модифицированный atoi? вопрос
Здравствуйте, r1der, Вы писали:
R>Напишите функию которая находит сумму всех цифр входящих в заданную строку
R>ну и естественно не правильно работает со знаками типа -- или ---..
Так все-таки, сумму цифр или чисел?
Re: Усовершенствованный модифицированный atoi? вопрос
Здравствуйте, Сергей Мухин, Вы писали:
СМ>Здравствуйте, r1der, Вы писали:
R>>Напишите функию которая находит сумму всех цифр входящих в заданную строку
СМ>что то такое:
СМ>int atoisum(const char *s) { СМ> int result=0; СМ> while(*s) СМ> if (*s>='0' && *s<-'9') result+=(*s-'0'); СМ> return result; СМ>}
забыл s++ где-нибудь
---
С уважением,
Сергей Мухин
Re[2]: Усовершенствованный модифицированный atoi? вопрос
Здравствуйте, Сергей Мухин, Вы писали:
СМ>Здравствуйте, r1der, Вы писали:
R>>Напишите функию которая находит сумму всех цифр входящих в заданную строку
СМ>что то такое:
СМ>int atoisum(const char *s) { СМ> int result=0; СМ> while(*s) СМ> if (*s>='0' && *s<-'9') result+=(*s-'0'); СМ> return result; СМ>}
Неплохо бы еще где-нибудь s++ добавить
With best regards
Pavel Dvorkin
Re[3]: Усовершенствованный модифицированный atoi? вопрос
Здравствуйте, Pavel Dvorkin, Вы писали:
PD>Здравствуйте, Сергей Мухин, Вы писали:
СМ>>Здравствуйте, r1der, Вы писали:
R>>>Напишите функию которая находит сумму всех цифр входящих в заданную строку
СМ>>что то такое:
СМ>>int atoisum(const char *s) { СМ>> int result=0; СМ>> while(*s) СМ>> if (*s>='0' && *s<-'9') result+=(*s-'0'); СМ>> return result; СМ>>}
PD>Неплохо бы еще где-нибудь s++ добавить
дада. уже сам заметил
---
С уважением,
Сергей Мухин
Re[2]: Усовершенствованный модифицированный atoi? вопрос
Здравствуйте, Kh_Oleg, Вы писали:
K_O>Здравствуйте, r1der, Вы писали:
R>>Напишите функию которая находит сумму всех цифр входящих в заданную строку
R>>ну и естественно не правильно работает со знаками типа -- или ---..
K_O>Так все-таки, сумму цифр или чисел?
все таки цифр
icq 314624
Re[2]: Усовершенствованный модифицированный atoi? вопрос
Здравствуйте, Сергей Мухин, Вы писали:
СМ>Здравствуйте, r1der, Вы писали:
R>>Напишите функию которая находит сумму всех цифр входящих в заданную строку
СМ>что то такое:
СМ>int atoisum(const char *s) { СМ> int result=0; СМ> while(*s) СМ> if (*s>='0' && *s<-'9') result+=(*s-'0'); СМ> return result; СМ>}
не понял у меня то где ошибка? это тоже самое что и strchr.. то что вы написали.. не совсем понял что вы имели ввиду
icq 314624
Re[3]: Усовершенствованный модифицированный atoi? вопрос
Здравствуйте, r1der, Вы писали:
R>Здравствуйте, Сергей Мухин, Вы писали:
СМ>>Здравствуйте, r1der, Вы писали:
R>>>Напишите функию которая находит сумму всех цифр входящих в заданную строку
СМ>>что то такое:
СМ>>int atoisum(const char *s) { СМ>> int result=0; СМ>> while(*s) СМ>> if (*s>='0' && *s<-'9') result+=(*s-'0'); СМ>> return result; СМ>>}
R>не понял у меня то где ошибка? это тоже самое что и strchr.. то что вы написали.. не совсем понял что вы имели ввиду
ну так разберись, тут всего три строчки. А разбираться в странной программе, которая делает заведомо не то — как стрёмно.
Например зачем выделять знаки плюс и минус? у цифр нет знака, зачем вообще смотреть не на цифры?
---
С уважением,
Сергей Мухин
Re[4]: Усовершенствованный модифицированный atoi? вопрос
Здравствуйте, Сергей Мухин, Вы писали:
СМ>Здравствуйте, r1der, Вы писали:
R>>Здравствуйте, Сергей Мухин, Вы писали:
СМ>>>Здравствуйте, r1der, Вы писали:
R>>>>Напишите функию которая находит сумму всех цифр входящих в заданную строку
СМ>>>что то такое:
СМ>>>int atoisum(const char *s) { СМ>>> int result=0; СМ>>> while(*s) СМ>>> if (*s>='0' && *s<-'9') result+=(*s-'0'); СМ>>> return result; СМ>>>}
R>>не понял у меня то где ошибка? это тоже самое что и strchr.. то что вы написали.. не совсем понял что вы имели ввиду
СМ>ну так разберись, тут всего три строчки. А разбираться в странной программе, которая делает заведомо не то — как стрёмно. СМ>Например зачем выделять знаки плюс и минус? у цифр нет знака, зачем вообще смотреть не на цифры?
про знаки плюс и минус вы правы, их надо пропускать, просто не спал ночью, делал английский) потому бывают заскоки не обращайте внимания)
у меня такой длинный код потому что проверки пропуска определенных символов используются для других функций. просто из прерыдущей функции сделал подсчет суммы цифр) щас поржал) насколько короче код)
int atoisum(const char *s) {
int result=0;
while(*s)
{
if (*s>='0' && *s<='9') result+=(*s-'0');
s++;
}
return result;
}
надо больше спать)) это уже предел по-моему))