Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.10.2012, 15:42   #1
Marfushka
Новичок
Джуниор
 
Аватар для Marfushka
 
Регистрация: 02.10.2012
Сообщений: 2
По умолчанию сумма чисел. (С++)

Программа считывает строку с символами и считает сумму чисел в ней.
Допустим, ввод: 105ириам_3совт56
то она должна вывести 164
только вот у меня она с кириллицей не работает(
как исправить?
Код:
#include <iostream> 
#include <string> 
using namespace std; 
void shift(char *, const size_t); 
bool summa(string); 
int main() { 
    string str; 
    cout << "Enter?.. "; getline(cin, str); 
    if (!summa(str)) { 
        locale::global(locale("")); 
        cout << "\a Строка не содержит чисел!"; 
    } 
    cin.get(); cin.get(); 
    return 0; 
} 
bool summa(string str) { 
    int len = str.length() + 1; 
    unsigned rest = len; 
    size_t end = len - 1; 
    char * arr = new char [len]; 
    strcpy_s(arr, len, str.c_str()); 
    bool finish = true, flag = true, zero = true; 
    int num, summa = 0; 
    while (--rest) { 
        if (zero && arr[0] == '0') zero = false; 
        if (num = atoi(arr)) {	
            if (flag) { 
                summa += atoi(arr); 
                flag = false; 
                zero = false; 
            } else if (num < 0 || isdigit(arr[0])) { 
                shift(arr, len); 
                if (!isdigit(arr[0])) { 
                    flag = true; 
                } 
            } 
        } else {	
            shift(arr, len); 
        } 
    } 
    if (!zero) cout << "Summa = " << summa << endl; 
    else finish = false; 
    return finish; 
} 
void shift(char * a, const size_t size) { 
    for (size_t n = 1; n < size; n++) { 
        a[n - 1] = a[n]; 
    } a[size - 1] = '\0'; 
}

Последний раз редактировалось Stilet; 02.10.2012 в 21:30.
Marfushka вне форума Ответить с цитированием
Старый 02.10.2012, 16:28   #2
MadHamster
Пользователь
 
Аватар для MadHamster
 
Регистрация: 13.01.2011
Сообщений: 28
По умолчанию

Код:
if (!isdigit(((unsigned char)arr[0])))
Попробуйте так
MadHamster вне форума Ответить с цитированием
Старый 03.10.2012, 07:57   #3
Marfushka
Новичок
Джуниор
 
Аватар для Marfushka
 
Регистрация: 02.10.2012
Сообщений: 2
По умолчанию

Цитата:
Сообщение от MadHamster Посмотреть сообщение
Код:
if (!isdigit(((unsigned char)arr[0])))
Попробуйте так
спасибооо, помогло))
Marfushka вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сумма чисел Dima-War Общие вопросы C/C++ 9 20.03.2012 23:14
Сумма чисел в строке microlab Паскаль, Turbo Pascal, PascalABC.NET 5 14.02.2012 12:49
Сумма чисел LOVELY Помощь студентам 1 12.02.2010 01:14
Сумма чисел в строке Oleg36 Помощь студентам 1 26.12.2008 08:39
Сумма чисел gamer123 Помощь студентам 2 19.01.2008 20:42