Усовершенствованный модифицированный 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
Re: Усовершенствованный модифицированный atoi? вопрос
От: Kh_Oleg  
Дата: 13.10.09 11:00
Оценка: +1
Здравствуйте, r1der, Вы писали:

R>Напишите функию которая находит сумму всех цифр входящих в заданную строку


R>ну и естественно не правильно работает со знаками типа -- или ---..


Так все-таки, сумму цифр или чисел?
Re: Усовершенствованный модифицированный atoi? вопрос
От: Сергей Мухин Россия  
Дата: 13.10.09 11:18
Оценка: +1
Здравствуйте, r1der, Вы писали:

R>Напишите функию которая находит сумму всех цифр входящих в заданную строку


что то такое:

int atoisum(const char *s) {
int result=0;
while(*s)
if (*s>='0' && *s<-'9') result+=(*s-'0');
return result;
}
---
С уважением,
Сергей Мухин
Re[2]: Усовершенствованный модифицированный atoi? вопрос
От: Сергей Мухин Россия  
Дата: 13.10.09 11:21
Оценка:
Здравствуйте, Сергей Мухин, Вы писали:

СМ>Здравствуйте, 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? вопрос
От: Pavel Dvorkin Россия  
Дата: 13.10.09 11:22
Оценка:
Здравствуйте, Сергей Мухин, Вы писали:

СМ>Здравствуйте, 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? вопрос
От: Сергей Мухин Россия  
Дата: 13.10.09 11:23
Оценка:
Здравствуйте, 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? вопрос
От: r1der Россия  
Дата: 13.10.09 11:33
Оценка:
Здравствуйте, Kh_Oleg, Вы писали:

K_O>Здравствуйте, r1der, Вы писали:


R>>Напишите функию которая находит сумму всех цифр входящих в заданную строку


R>>ну и естественно не правильно работает со знаками типа -- или ---..


K_O>Так все-таки, сумму цифр или чисел?


все таки цифр
icq 314624
Re[2]: Усовершенствованный модифицированный atoi? вопрос
От: r1der Россия  
Дата: 13.10.09 11:34
Оценка:
Здравствуйте, Сергей Мухин, Вы писали:

СМ>Здравствуйте, 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? вопрос
От: Сергей Мухин Россия  
Дата: 13.10.09 11:39
Оценка:
Здравствуйте, 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 Россия  
Дата: 13.10.09 11:47
Оценка:
Здравствуйте, Сергей Мухин, Вы писали:

СМ>Здравствуйте, 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;
}
надо больше спать)) это уже предел по-моему))
icq 314624
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.