const char* to char



  • const heißt eben konstant. Also ändert es sich nicht.
    Du möchtest erstmal deine Zeilen

    int a[10]={"null","eins","zwei","drei","vier","fuenf","sechs","sieben","acht","neun"}; ...
    

    in eine einzige Zeile

    const char textzahlen[]={"null","eins","zwei","drei","vier","fuenf","sechs","sieben","acht","neun"};
    

    ändern. const char[] deshalb, weil sich die Zahlen 0 bis 9 als Text niemals ändern werden.

    Danach dann

    printf("Die Zahl lautet %s, %s, %s, %s\n", textzahlen[a], textzahlen[b], textzahlen[c], textzahlen[d]);
    //oder
    cout << "Die Zahl lautet " << textzahlen[a] << textzahlen[b] << textzahlen[c] << textzahlen[d];
    

    Zur Erklärung: textzahlen ist ein Array (=Feld) von Strings, textzahlen[0] ist der erste String "null", textzahlen[1](="eins") der zweite usw. Durch die Anordnung kannst du direkt mit textzahlen[meineZahlAlsInt] die entsprechende Zahl als Text bekommen.



  • so schwer kann das doch gar nicht sein...

    const char textzahlen[]={"null","eins","zwei","drei","vier","fuenf","sechs","sieben","acht","neun"};
    

    ein array aus zeichen?!
    nein...
    ein array aus einem array aus zeichen:

    const char* textzahlen[]={"null","eins","zwei","drei","vier","fuenf","sechs","sieben","acht","neun"};
    //oder
    const char* textzahlen[10]={"null","eins","zwei","drei","vier","fuenf","sechs","sieben","acht","neun"};
    

    bb


  • Mod

    so geht es auch

    const char textzahlen[][sizeof "sieben"]={"null","eins","zwei","drei","vier","fuenf","sechs","sieben","acht","neun"};
    


  • camper schrieb:

    [sizeof "sieben"]
    

    Gut das der Compiler deutsch kann und weiß, dass sizeof "sieben" 7 ist.



  • Super danke euch.



  • ich find das insgesamt ziemlich umständlich.

    Wenn ich das richtig verstehe, soll jemand z.B. 125894 eingeben und "eins, zwei, fünf, acht, neun, vier" erhalten, oder?

    da liegt doch die verwendung von switch und einer for-schleife nahe, oder nicht?

    int input [6], x;
    cout << "Zahl eingeben (sechsstellig)" << endl;
    cin.getline (input, 6);
    for (x = 0 ; x < 6 ; x++)
    {
        switch (input[x])
        {
            case 0:
            cout << "null ";
            break;
            case 1:
            cout << "eins ";
            break;
            case 2:
            cout << "zwei ";
            break;
            case 3:
            cout << "drei "
            break;
            case 4:
            cout << "vier ";
            break;
            cse 5:
            cout << "fünf ";
            break;
            case 6:
            cout << "sechs ";
            break;
            case 7:
            cout << "sieben ";
            break;
            case 8:
            cout << "acht ";
            break;
            case 9:
            cout << "neun ";
            break;
        }
    }
    cout << endl;
    


  • geht mit nem array mind. genau so schön und ist wesentlich schneller : P



  • du hast recht, es ist schlechter für die performance, aber ich fand den gedankengang mit den hilfsvariablen irgendwie mühseelig.
    Und solange das das einzige ist, was das programm machen soll, dürfte das keinen pc zu sehr beanspruchen, oder doch?



  • kARRE schrieb:

    ich find das insgesamt ziemlich umständlich.

    direkter vergleich

    int input [6], x;
    cout << "Zahl eingeben (sechsstellig)" << endl;
    cin.getline (input, 6);
    for (x = 0 ; x < 6 ; x++)
    {
        switch (input[x])
        {
            case 0:
            cout << "null ";
            break;
            case 1:
            cout << "eins ";
            break;
            case 2:
            cout << "zwei ";
            break;
            case 3:
            cout << "drei "
            break;
            case 4:
            cout << "vier ";
            break;
            cse 5:
            cout << "fünf ";
            break;
            case 6:
            cout << "sechs ";
            break;
            case 7:
            cout << "sieben ";
            break;
            case 8:
            cout << "acht ";
            break;
            case 9:
            cout << "neun ";
            break;
        }
    }
    cout << endl;
    
    int input [6], x;
    cout << "Zahl eingeben (sechsstellig)" << endl;
    cin.getline (input, 6);
    for (x = 0 ; x < 6 ; x++)
    {
        static const char* textzahlen[10]={"null","eins","zwei","drei","vier","fuenf","sechs","sieben","acht","neun"};
        if(0<=input[x] && input[x]<=9)
            cout<<textzahlen[input[x]];
    }
    cout << endl;
    


  • der hauptgrund war eigtl nicht die performance sondern eher die Hässlichkeit ;P

    Guck mal, geht für jede positive Zahl:
    mit 3 Zeilen mehr so gar für jede (ganze) Zahl
    und wenn man dann noch will, kann man für noch 3 Zeilen mehr auch noch für alle anderen zahlen machen

    void print_to_cout(unsigned int value)
    {
      static const char* zahlen = {"null", "eins", "zwei", "drei", "vier", "fuenf", "sechs", "sieben", "acht", "neun"};
    
      if(i == 0)
        return;
    
      unsigned int these = value%10;
      print_to_cout(value/10);
      std::cout << zahlen[these] << " ";
    }
    
    int main()
    {
      unsigned int i;
      std::cin >> i;
      print_to_cout(i);
    }
    

    bb


Anmelden zum Antworten