Beispiel 7: romZuArabien III

06.11.2016 05:30 Uhr
#include <iostream>

using namespace std;


int romZuArabien(char *rom);

int main()
{
char zeile[100] =
   "Dies ist ein Text aus mi Nacht.";
int worte[20];
int anzahlWorte;
int arabisch;

worte[0]=0;
anzahlWorte=1;
for (int i=0; zeile[i] != '\0'; i = i + 1)
    if (zeile[i]==' ')
       {
       zeile[i]='\0';
       worte[anzahlWorte]=i+1;
       anzahlWorte=anzahlWorte+1;
       }

for (int i=0; i<anzahlWorte; i++)
    {
    cout << "Ein Wort: ";
    arabisch=romZuArabien(&zeile[worte[i]]);
    if (arabisch>0) cout << arabisch;
    else cout << &zeile[worte[i]];
    cout << endl;
    }
}

int romZuArabien(
char            *rom)
{
char roemischeZiffern[8] = "ivxlcdm";
int ziffernWert[7] = {1, 5, 10, 50, 100, 500, 1000};
int arabisch[10], stellen=0, resultat;

if (rom[0]=='0') return 0;

stellen=0;
for (int j; rom[stellen]!='\0'; stellen++)
    {
    for (j = 0; j < 7; j++)
        if (rom[stellen] == roemischeZiffern[j])
           {
           arabisch[stellen] = ziffernWert[j];
           break;
           }
    if (j == 7) return 0;
    }

for (int j=1; j < stellen; j++)
    if (arabisch[j] > arabisch[j-1])
       {
       arabisch[j] -= arabisch[j-1];
       arabisch[j-1] = 0;
       }

resultat=0;
for (int j=0; j < stellen; j++) resultat += arabisch[j];

return resultat;
}

Beispiel 7: Erläuterungen I


#include <iostream>

using namespace std;


int romZuArabien(char *rom);

int main()
{
char zeile[100] =
   "Dies ist ein Text aus mi Nacht.";
int worte[20];
int anzahlWorte;
int arabisch;

worte[0]=0;
anzahlWorte=1;
for (int i=0; zeile[i] != '\0'; i = i + 1)
    if (zeile[i]==' ')
       {
       zeile[i]='\0';
       worte[anzahlWorte]=i+1;
       anzahlWorte=anzahlWorte+1;
       }

for (int i=0; i<anzahlWorte; i++)
    {
    cout << "Ein Wort: ";
    arabisch=romZuArabien(&zeile[worte[i]]);
    if (arabisch>0) cout << arabisch;
    else cout << &zeile[worte[i]];
    cout << endl;
    }
}

int romZuArabien(
char            *rom)
{
char roemischeZiffern[8] = "ivxlcdm";
int ziffernWert[7] = {1, 5, 10, 50, 100, 500, 1000};
int arabisch[10], stellen=0, resultat;

if (rom[0]=='0') return 0;

stellen=0;
for (int j; rom[stellen]!='\0'; stellen++)
    {
    for (j = 0; j < 7; j++)
        if (rom[stellen] == roemischeZiffern[j])
           {
           arabisch[stellen] = ziffernWert[j];
           break;
           }
    if (j == 7) return 0;
//Schliesslich entfernen wir noch die Fehlerbehandlung aus
//romZuArabien und überlassen es der aufrufenden Funktion zu entscheiden,
//was zu geschehen hat, wenn die Funktion mit einem unsinnigen Wert
//aufgerufen wird - indem wir ihr durch einen sonst nicht möglichen
//Wert signalisieren, daß etwas schief gelaufen ist.
    }

for (int j=1; j < stellen; j++)
    if (arabisch[j] > arabisch[j-1])
       {
       arabisch[j] -= arabisch[j-1];
       arabisch[j-1] = 0;
       }

resultat=0;
for (int j=0; j < stellen; j++) resultat += arabisch[j];

return resultat;
}

Anhang: example7.cpp

Schlagwörter: