Konwersja liczb arabskich na rzymskie – błędy kompilacji

0

Mam pytanie, bo nieogarniam co jest zle w funkcji DecToRoman. Reszta dziala poprawnie.z gory dzieki za pomoc.

60	15	C:\Users\Simon\Desktop\PP\1.cpp	[Error] invalid conversion from 'const char*' to 'char' [-fpermissive]
72	10	C:\Users\Simon\Desktop\PP\1.cpp	[Error] invalid conversion from 'char*' to 'char' [-fpermissive]
#include <stdio.h>
#include <string.h>

int RomanToDec(char* num);
char DecToRoman(int n);

int main()
{	
	int x, nLiczbaD;
	char y, nLiczba[100];
	
	printf("Podaj liczbe Rzymska : ");
	fgets(nLiczba, 100, stdin);
	x = RomanToDec(nLiczba);
	printf("Konwersja na liczbe Arabska : %d", x);
	
	printf("Podaj liczbe Arabska : ");
	scanf("%d", &nLiczbaD);
	y = DecToRoman(nLiczbaD);
	
	return 0;
}

int RomanToDec(char* num)
{
	char t1[] = {'M', 'D', 'C', 'L', 'X', 'V', 'I'};
	char* t2[] = {"CM", "CD", "XC", "XL", "IX", "IV", "I"};
	int t3[] = {1000, 500, 100, 50, 10, 5, 1};
	int t4[] = {900, 400, 90, 40, 9, 4, 1};
	 
	int len = strlen(num)-1;
	int sum = 0;
	
	int j = 0, i = 0;
	while (i < len)
	{
		if (num[i] == t1[j])
		{
			sum += t3[j];
			i++;
		}
		else if (i < len-1 && num[i] == t2[j][0] && num[i+1] == t2[j][1])
		{
			sum += t4[j];
			i += 2;
		}
		else
		j++;
	}
	return sum;
}
char DecToRoman(int n)
{

	char t1[] = {'M', 'D', 'C', 'L', 'X', 'V', 'I'};
	char* t2[] = {"CM", "CD", "XC", "XL", "IX", "IV", "I"};
	int t3[] = {1000, 500, 100, 50, 10, 5, 1};
	int t4[] = {900, 400, 90, 40, 9, 4, 1};
	
	char wynik = "";
	int j = 0;
	while (n > 0)
	{
		if (n >= t3[j])
		{
			n -= t3[j];
			wynik += t1[j];
		}
		else if (n >= t4[j])
		{
			n -= t4[j];
			wynik += t2[j];
		}
		else
		j++;
	}
	return wynik;
}	
1
char wynik = "";
0

Zrobione ale nadal cos nie tak

72	10	C:\Users\Simon\Desktop\PP\1.cpp	[Error] invalid conversion from 'char*' to 'char' [-fpermissive]
#include <stdio.h>
#include <string.h>

int RomanToDec(char* num);
char DecToRoman(int n);

int main()
{	
	int x, nLiczbaD;
	char y, nLiczba[100];
	
	printf("Podaj liczbe Rzymska : ");
	fgets(nLiczba, 100, stdin);
	x = RomanToDec(nLiczba);
	printf("Konwersja na liczbe Arabska : %d", x);
	
	printf("Podaj liczbe Arabska : ");
	scanf("%d", &nLiczbaD);
	y = DecToRoman(nLiczbaD);
	
	return 0;
}

int RomanToDec(char* num)
{
	char t1[] = {'M', 'D', 'C', 'L', 'X', 'V', 'I'};
	char* t2[] = {"CM", "CD", "XC", "XL", "IX", "IV", "I"};
	int t3[] = {1000, 500, 100, 50, 10, 5, 1};
	int t4[] = {900, 400, 90, 40, 9, 4, 1};
	 
	int len = strlen(num)-1;
	int sum = 0;
	
	int j = 0, i = 0;
	while (i < len)
	{
		if (num[i] == t1[j])
		{
			sum += t3[j];
			i++;
		}
		else if (i < len-1 && num[i] == t2[j][0] && num[i+1] == t2[j][1])
		{
			sum += t4[j];
			i += 2;
		}
		else
		j++;
	}
	return sum;
}
char DecToRoman(int n)
{

	char t1[] = {'M', 'D', 'C', 'L', 'X', 'V', 'I'};
	char* t2[] = {"CM", "CD", "XC", "XL", "IX", "IV", "I"};
	int t3[] = {1000, 500, 100, 50, 10, 5, 1};
	int t4[] = {900, 400, 90, 40, 9, 4, 1};
	
	char wynik;
	int j = 0;
	while (n > 0)
	{
		if (n >= t3[j])
		{
			n -= t3[j];
			wynik += t1[j];
		}
		else if (n >= t4[j])
		{
			n -= t4[j];
			wynik += t2[j];
		}
		else
		j++;
	}
	return wynik;
}	
2

Sygnatura Twojej funkcji wygląda następująco:

char DecToRoman(int n)

Oznacza ona, że Twoja funkcja DecToRoman zawsze zwracać będzie jeden znak - czy na pewno to jest Twoim celem / założeniem?

0

To ma byc const char* ?

0

Ano ;-)

0

char * to akurat nie, bo to się skończy jako Undefined behavior.
Użyj std::string

0

a to nie jest w C++?

1

A sorry to w takim razie funkcja musi wyglądać tak:

char* WriteRoman(char *buff, int x)

albo jeśli być bardzo dokładnym i zapobiegliwym to:

char* WriteRoman(char *buff, int buffSize, int x)

Przy czym by wartość zwracana miała praktyczną wartość, to powinna wskazywać na koniec dodanego napisu.

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