Форум программистов, компьютерный форум CyberForum.ru

Из арабских чисел в римские - C++

Восстановить пароль Регистрация
 
Antoha1
0 / 0 / 0
Регистрация: 24.05.2012
Сообщений: 16
12.07.2012, 14:21     Из арабских чисел в римские #1
Функция для перевода из арабских чисел в римские. Как можно заменить устаревший sprintf?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
string _func_arab_to_roman(int arab){
    string arab_str;
    string res;
    char arr[100];
    int d;
 
    sprintf(arr, "%d", arab);
    arab_str = arr;
 
    int arab_len = arab_str.size();
    for (int i = 0; i < arab_len; i++){
        d = arab_str[arab_len - i - 1] - 48;
        if ((d + 1) % 5 == 0){
            res = copy("IXCM", i, 1) + copy("VXLCDM", i * 2 + (d + 1) / 5 - 1, 1) + res;
        }
        else{
            res = copy("VLD", i, d / 5) + copy("IIIXXXCCCMMM", i * 3, d % 5) + res;
        }
    }
 
    return res;
}
 
string copy(string s, int first, int k){
    string res;
    for (int i = first; i < first + k; i++){
        if (i == s.size()){
            return res;
        }
        res += s[i];
    }
    return res;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MrCold
851 / 749 / 71
Регистрация: 11.01.2012
Сообщений: 1,942
12.07.2012, 15:03     Из арабских чисел в римские #2
Цитата Сообщение от Antoha1 Посмотреть сообщение
Как можно заменить устаревший sprintf?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <iostream>
#include <string>
#include <sstream>
 
using namespace std;
 
int main ()
{
 
    char chararr[12];
 
    int iValue = 36;
 
    sprintf( chararr, "%d", iValue );
     
    cout << chararr << endl;
 
     ostringstream ostr;
 
     ostr << iValue;
 
    strcpy ( chararr, ( ostr.str() ).c_str() );
 
    cout << chararr << endl;
 
    return ( 0 );
}
Добавлено через 52 секунды
sprintf хоть старый, но рулит .
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
12.07.2012, 15:15     Из арабских чисел в римские #3
Цитата Сообщение от Antoha1 Посмотреть сообщение
Как можно заменить устаревший sprintf?
В вашем примере достаточно std::to_string
Antoha1
0 / 0 / 0
Регистрация: 24.05.2012
Сообщений: 16
12.07.2012, 15:21  [ТС]     Из арабских чисел в римские #4
Цитата Сообщение от MrCold Посмотреть сообщение
Добавлено через 52 секунды
sprintf хоть старый, но рулит .
Спасибо! Все работает!

ostr << iValue;

<< что делает в этом примере? Пишу для windows forms
MrCold
851 / 749 / 71
Регистрация: 11.01.2012
Сообщений: 1,942
12.07.2012, 15:43     Из арабских чисел в римские #5
Antoha1, для WinForms есть свои функ конвертации
C++
1
2
3
int iVal = 36;
 
  String ^s = Convert::ToString( iVal );
http://www.cyberforum.ru/redirector....UzRHZzLjgwJTI5
Yandex
Объявления
12.07.2012, 15:43     Из арабских чисел в римские
Ответ Создать тему
Опции темы

Текущее время: 05:55. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru