[C++] Strings kopieren

Nebuk

PCtipp-Moderation
Teammitglied
Hallo sitze gerade an einem Programm, welches ich nicht ganz so hinbekomme, wie ich eigentlich möchte.

Damit es richtig läuft, möchte ich das Ergebnis (sozusagen die Ausgabe) einer Unechten Funktion in einen String in der Funktion MAIN zuweisen.

Die Unechte Funktion sieht etwa so aus:

Code:
wandler(poszaehler, zahl);
Die Funktion soll aus einer herkömmlichen (arabische) Zahl in eine römische Zahl umwandeln.

Soweit so gut, die Funktion funktioniert und gibt jeweils die korrekte Zahl aus.

Strings kopiert man, soviel ich weiss mit

Code:
char stringneu[300];
...
strcpy(stringneu, (wandler(poszaehler, zahl));

Was gibt es nun für eine Lösung für dieses Problem?

Ich hoffe meine Beschreibung ist bisschen verständlich, wenn ihr wollt, kann ich euch auch meinen bisher erstellten Code posten.
 

Amroc

Stammgast
Ich weiss nicht was eine unechte Funktion ist, aber kannst du nicht einfach den errechneten Wert mit return an die Hauptfunktion zurückgeben?
bin mit der Syntax von C++ nicht mehr ganz vertraut, aber in etwa so:

PHP:
char wandler(poszaehler,zahl)
{
    // berechne
    return roemisch;
}
 

I Think Linux

Stammgast
Hallo Nebuk

Poste doch mal deinen ganzen Code.

Amroc schrieb:
char wandler(poszaehler,zahl)
{
// berechne
return roemisch;
}

Bei den Übergabewerten werden im Funktionsprototypen die Datentypen benötigt:
Code:
char wandler(int poszaehler, int zahl)
{
    // berechne
    return roemisch;
}
 

M.Ä.N.E

Stammgast
Bin mir jetzt nicht ganz sicher aber kann man ein string aus ner funktion direkt zurück geben? Mein vorschlag gib doch den string:"stringneu" als argument deiner funktion mit.
 

Nebuk

PCtipp-Moderation
Teammitglied
Wie gesagt, ist zwar nicht mehr aktuell... werd ich aber heute Abend noch posten.
 

Nebuk

PCtipp-Moderation
Teammitglied
PHP:
#include <iostream>
#include <stdlib.h>

using namespace std;

void wandler(int stelle, int anzahl) // Funktion zum Arab2Röm rechnen
{
    char str[255];
    
    // Arab2Röm Zahl 6-8 
    if (anzahl >=6 && anzahl <= 8)
    {
        switch (stelle) // Basiszahlen der Einer, Zehner, Hundeter (6-8)
        {
            case 1:
            strcpy(str, "V");
            break;
            
            case 2:
            strcpy(str, "L");
            break;
            
            case 3:
            strcpy(str, "D");
            break;
        } // < Basiszahlen (6-8)
        
        for(int i = 0; i <= anzahl-6; i++) // Hinzufügen der Additionszahlen (6-8)
        {
        
            switch (stelle)
            {
                case 1:
                strcat(str, "I");
                break;
            
                case 2:
                strcat(str, "X");
                break;
            
                case 3:
                strcat(str, "C");
                break;
            }
            
        } // < Additionszahlen (6-8)
        
    } // < Zahl 6-8
    
    else if (anzahl >= 1 && anzahl <= 3) // Arab2Röm Zahlen 1-3
    {        
        
        for(int ii = 0; ii <= anzahl-1; ii++) // Hinzufügen der Additionszahlen (1-3)
        {

            switch (stelle)
            {
                case 1:
                strcat(str, "I");
                break;
            
                case 2:
                strcat(str, "X");
                break;
            
                case 3:
                strcat(str, "C");
                break;
                
                case 4:
                strcat(str, "M");
                break;
            }            
        }
        str[0] = str[3];
        str[1] = str[4];
        str[2] = str[5];
        str[3] = str[6];
        str[4] = str[7];
    } // < Zahl 1-3
    
    else if (anzahl == 4) // Ausnahme 4
    {
        switch (stelle)
        {
            case 1:
            strcat(str, "IV");
            break;
            
            case 2:
            strcat(str, "XL");
            break;
            
            case 3:
            strcat(str, "CD");
            break;
        }
        str[0] = str[3];
        str[1] = str[4];
        str[2] = str[5];
    } // < Ausnahme 4
    
    else if (anzahl == 5) // Ausnahme 5
    {
        switch (stelle)
        {
            case 1:
            strcat(str, "V");
            break;
            
            case 2:
            strcat(str, "L");
            break;
            
            case 3:
            strcat(str, "D");
            break;
        }
        str[0] = str[3];
        str[1] = str[4];
        str[2] = str[5];
    } // < Ausnahme 5
    
    else if (anzahl == 6) // Ausnahme 6
    {
        switch (stelle)
        {
            case 1:
            strcat(str, "VI");
            break;
            
            case 2:
            strcat(str, "LX");
            break;
            
            case 3:
            strcat(str, "DC");
            break;
        }
        str[0] = str[3];
        str[1] = str[4];
        str[2] = str[5];
    } // < Ausnahme 6
    
    else if (anzahl == 9) // Ausnahme 6
    {
        switch (stelle)
        {
            case 1:
            strcat(str, "IX");
            break;
            
            case 2:
            strcat(str, "XC");
            break;
            
            case 3:
            strcat(str, "CM");
            break;
        }
        str[0] = str[3];
        str[1] = str[4];
        str[2] = str[5];
    } // < Ausnahme 6

    cout << str << endl;
} // < Arab2Röm
                                 // =====================
int main(int argc, char *argv[]) // *** MAIN FUNKTION ***
{                                // =====================
    // Variablenvereinbarung
    char str[255];
    int zahl = 0;
    int pos = 0;
    int arab = 0;
    
    // Eingabe der umzuwandelnden Zahl
    cout << "Bitte Zahl zum umwandeln eingeben > ";
    cin >> str;
    
    // Ausschliessen von Falscheingaben
    if(str[0] >= '1'
    && str[0] <= '9')
    {
        zahl = str[0] - '0';
        pos = 1;
    }
    while (str [pos] >= '0'
           && str[pos] <= '9')
    {
         zahl = 10 * zahl + str[pos] - '0';
         pos++;
    }
    if (str[pos] != '\0')
    {
        cout << "Error, Ungueltige Eingabe"
             << endl;
    } // < Falscheingaben
    
    else // Wenn KORREKTE Eingabe
    {
        char mystr;
        int poszaehler = 4; // *** 1 ***
        
        
        // Auswählen der EINER
        for(int i = 0; i <= strlen(str)-4; i++)  //  *** 1 ***
        {
            mystr = str[i];
        }
        
        arab = mystr - '0';
        
        wandler(poszaehler, arab);
        //int stelle, int anzahl)

    } // < KORREKTE Eingabe
  
  system("PAUSE");	
  return 0;
}
So, hab den Quellcode mal "farbig" darstellen lassen, sieht meiner Meinung nach übersichtlicher aus.

Folgendes noch zum Code. Er liest noch nur jeweils eine Zahl ein. Wenn man unten bei den Kommentaren *** 1 *** die Zahl auf 1, 2, 3 oder 4 ändert, werden die anderen Stellen der eingelesenen Zahl umgewandelt. (deshalb wollte ich die die Ausgabestrings in einen neuen String kopieren...
Gibt noch viele andere kleine Sachen, die hier nicht so ganz stimmen :)
 
Oben