Konwersja kodu

0

Witam, chciałam zapytać czy jeśli posiadam program napisany w c/c++ jest możliwość sszyblkiego przekonwertowania kodu do c/clr ? :)

0

Nie, bo nic nie trzeba robić.

0

Zobacz to mój program w c++

using namespace std;
int trans(char a){
switch ( a ){
case 'X':return 10;break;
case 'I':return 1;break;
case 'V':return 5;break;
case 'L':return 50;break;
case 'C':return 100;break;
case 'D':return 500;break;
case 'M':return 1000;break;
default: return 0; break;
}
}
int main()
{
char jednosci[12][255] = {" ", "I", "II", "III", "IV", "V", "VI",
"VII", "VIII", "IX", '\0'};
char dziesiatki[12][255] = {" ", "X", "XX", "XXX", "XL", "L", "LX",
"LXX", "LXXX", "XC", '\0'};
char setki[12][255] = {" ", "C", "CC", "CCC", "CD", "M", "MC", "MCC",
"MCCC", "CM", '\0'};
char tysiace[12][255] = {" ", "M", "MM", "MMM", '\0'};

cout<<"Wybierz 1 dla konwersji arabska->rzymska i 2 dla rzymska->arabska: ";
int wybor=0;
cin>>wybor;
if(wybor==1){
cout<<"Podaj cyfre arabska (nie wieksza niz 3999): ";
string a;
int cyfra=0;
int len;
while(!cyfra){ // sprawdzenie czy podana jest liczba
cin>>a;//wczytuje liczbe do stringa
len = a.length(); //dlugosc stringa, czyli ilosc cyfr w liczbie
cyfra = atoi(a.c_str());//string do char i char do int.
}
int* temp = new int[len];//tablica o dlugosci cyfr w liczbie
int i=len-1;// iterator pomniejszony o jeden (zaczynamy od o tablica)
int modul=10;// dzielenie przez 10
do {
temp[i] = cyfra%modul;
cyfra = cyfra/modul;
i--;
} while (cyfra>0);
//petla przepisuje po jednej cyfrze z liczby i wrzuca je do tablicy
cout<<"Liczba arabska zapisana w systemie rzymskim: ";
//4 mozliwosci dlugosci liczby, wiec 4 ify. Mozna to zrobic tez petla.
if(len == 4) cout<<tysiace[temp[0]]<<setki[temp[1]]<<dziesiatki[temp[2]]<<jednosci[temp[3]];

if(len == 3)
cout<<setki[temp[0]]<<dziesiatki[temp[1]]<<jednosci[temp[2]];

if(len == 2)
cout<<dziesiatki[temp[0]]<<jednosci[temp[1]];

if(len == 1)
cout<<jednosci[temp[0]];
delete [] temp;

}
if(wybor==2){

string a;
cout<<"Podaj cyfre w systemie rzymskim: ";
cin>>a;
int element=0, wynik=0, temp=0;
for (int i=0;i<a.length();++i)
{
element = trans(a.at(i));
if(i<a.length()-1){
temp=trans(a.at(i+1));
}
if (temp>element)
{
element =0-element;
}
wynik=element+wynik;
}
cout<<wynik;
}
return 0;
}

a to mój program w c++/clr wyskakuje mi błąd może mógłbyś mi jakoś pomóc ?

using namespace std;
int trans(char a){
switch ( a ){
case 'X':return 10;break;
case 'I':return 1;break;
case 'V':return 5;break;
case 'L':return 50;break;
case 'C':return 100;break;
case 'D':return 500;break;
case 'M':return 1000;break;
default: return 0; break;
}
}
int main()
{
char jednosci[12][255] = {" ", "I", "II", "III", "IV", "V", "VI",
"VII", "VIII", "IX", '\0'};
char dziesiatki[12][255] = {" ", "X", "XX", "XXX", "XL", "L", "LX",
"LXX", "LXXX", "XC", '\0'};
char setki[12][255] = {" ", "C", "CC", "CCC", "CD", "M", "MC", "MCC",
"MCCC", "CM", '\0'};
char tysiace[12][255] = {" ", "M", "MM", "MMM", '\0'};

cout<<"Wybierz 1 dla konwersji arabska->rzymska i 2 dla rzymska->arabska: ";
int wybor=0;
cin>>wybor;
if(wybor==1){
cout<<"Podaj cyfre arabska (nie wieksza niz 3999): ";
string a;
int cyfra=0;
int len;
while(!cyfra){ // sprawdzenie czy podana jest liczba
cin>>a;//wczytuje liczbe do stringa
len = a.length(); //dlugosc stringa, czyli ilosc cyfr w liczbie
cyfra = atoi(a.c_str());//string do char i char do int.
}
int* temp = new int[len];//tablica o dlugosci cyfr w liczbie
int i=len-1;// iterator pomniejszony o jeden (zaczynamy od o tablica)
int modul=10;// dzielenie przez 10
do {
temp[i] = cyfra%modul;
cyfra = cyfra/modul;
i--;
} while (cyfra>0);
//petla przepisuje po jednej cyfrze z liczby i wrzuca je do tablicy
cout<<"Liczba arabska zapisana w systemie rzymskim: ";
//4 mozliwosci dlugosci liczby, wiec 4 ify. Mozna to zrobic tez petla.
if(len == 4) cout<<tysiace[temp[0]]<<setki[temp[1]]<<dziesiatki[temp[2]]<<jednosci[temp[3]];

if(len == 3)
cout<<setki[temp[0]]<<dziesiatki[temp[1]]<<jednosci[temp[2]];

if(len == 2)
cout<<dziesiatki[temp[0]]<<jednosci[temp[1]];

if(len == 1)
cout<<jednosci[temp[0]];
delete [] temp;

}
if(wybor==2){

string a;
cout<<"Podaj cyfre w systemie rzymskim: ";
cin>>a;
int element=0, wynik=0, temp=0;
for (int i=0;i<a.length();++i)
{
element = trans(a.at(i));
if(i<a.length()-1){
temp=trans(a.at(i+1));
}
if (temp>element)
{
element =0-element;
}
wynik=element+wynik;
}
cout<<wynik;
}
return 0;
}
0

Może zacznij od formatowania kodu.

0

Na oko nie widzę różnic między tymi dwoma kodami, a nie chce mi się przyglądać.

Jak już @_13th_Dragon powiedział, nie trzeba nic robić. Kod w C++ można potraktować jako C++/CLI bez żadnych zmian.

O co więc chodzi? O przerobienie kodu z STL (standardowa biblioteka C++) na BCL (standardowa biblioteka .NET Framework)?

Czy może o użycie kodu korzystającego zstd::string w innym kodzie, który korzysta z System::String, czyli o konwersję stringów z jednej klasy na drugą?

0

dokłądnie chodzi o konwersje stringów z jednej klasy na drugą

0

po pierwsze
using namespace System;

Po drugie String z dużej litery ;)

1

było wiele razy, dawałem przykłady za każdym razem…

ale niech będzie, ten raz jeszcze.

#include <string>
#include <msclr\marshal_cppstd.h>

using namespace std;
using namespace System;
using namespace msclr::interop;

int main()
{
	string s1 = "ala ma kota";
	String ^s2 = marshal_as<String^>(s1);
	string s3 = marshal_as<string>(s2);
}
0

dziękuję bardzo :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1