# String als Parameter



## michelr (4. Juni 2004)

Hallo,

bin leider noch ziemlicher C++ Anfänger. 
Ich will eine Funktion schreiben mit einem String als Parameter. Bedingung ist das ich eine Funktion schreibe mit der Eingabe als Parameter z.B. "2+5" oder "3*3" und dem Ergebnis als Rückgabe. (praktisch wie ein simpler Taschenrechner der die grundrechenarten versteht)
Wie schaff ich es jetzt mit Hilfe eines Strings als eingabeparameter das er die eingegebene Zeile z.b "2+5" berechnet  Leider habe mit strings noch wenig Erfahrung und wäre daher für eure Hilfe sehr dankbar. Ich will einfach das das Programm die eingabe des benutzers von links nach rechts liest und das ergebnis ausgibt.

Für eure Hilfe wäre ich sehr dankbar.


----------



## Daniel Toplak (4. Juni 2004)

*String in C++, ich liebe es*

Also zum Thema Strings in C++ (*luft hol*)
Es gibt zig Stringklassen (heutzutage programmiert doch jeder selbst eine und keine Taugt was;-)).
z.B.:
- CString
- TString
- string (aus der STL)
- QString
- RWCString
- usw......
Alle basieren sie auf einem nullterminierten char-Array.
Was wieder um ein C-String wäre (C als Sprache)
So wie du siehst ist die Sache mit Strings in C/C++ nicht so ganze ohne.
Die Frage ist jetzt, was kannst du und was verwendest du, bzw. was möchtest oder kannst du verwenden.
Ich empfehle dir den string aus der STL wenn du C++ programmierst, wenn du C programmierst, dann hat sich das eh erledigt, da gibt es keine Klassen.
Wie du dann den String verarbeitest hängt natürlich davon ab, welchen du verwendest.

So das war mal ein kurzer Abriss über Strings.

Gruß Homer


----------



## Lampe (4. Juni 2004)

Meinste nun wirklich die Verwendung einer String Klasse?
Also ohne groß nachzudenken würde ich das einfach mit einem simplen Character "String" machen.


Ich habe mir gerade mal die Arbeit gemacht:


```
/* Copyright (c) 2004 Christian B. Ries <programming@linux-sources.de>
 * License: GNU GPL
 */
#include <string>
#include <iostream>

using namespace std;

char * next( char * );
int rechne( string );
int rechne( char * );

char *
next( char * zeile )
{
    while( *zeile != ' ' )
        zeile++;
    zeile++;
    return zeile;
}

int
rechne( string r )
{
    return rechne( (char *)r.c_str() );
}

int
rechne( char * zeile )
{
    int erg, i;
    char * z_bck = zeile;

    #define N(x) (x=next(x))
    #define ADD(x) (erg+=atoi(x))
    #define MIN(x) (erg-=atoi(x))
    #define MUL(x) (erg*=atoi(x))

    erg = atoi(zeile);
    for( ; *zeile != '\0'; zeile++ ) {

        if( *zeile == ' ' ) continue;

        if(*zeile=='*') {
            N(zeile);
            MUL(zeile);
        } else if(*zeile=='+') {
            N(zeile);
            ADD(zeile);
        } else if(*zeile=='-') {
            N(zeile);
            MIN(zeile);
        }
    }

    zeile = z_bck;
    return erg;
}

int
main( int argc, char **argv )
{
    string r = "76 - 81";
    cout << "Erg aus (" << r << "): "
         << rechne( (char*)r.c_str() ) << endl;
    cout << "Erg aus (" << r << "): "
         << rechne( r ) << endl;
    return 0;
}
```


Evtl. hilft dir das weiter...


----------



## Kachelator (4. Juni 2004)

@Daniel:


> Es gibt zig Stringklassen (heutzutage programmiert doch jeder selbst eine und keine Taugt was).


Die einzige wahre Stringklasse ist std::string aus der <string>, weil das Standard ist (oder sein sollte).
Unnütze Stringklassen habe ich auch schon gebaut. In einem Fall musste ich aber mal tatsächlich eine eigene, spezialisierte und zu std::string kompatible  "Mini"-Stringklasse bauen, weil die entsprechende STL-Implementierung (auf der XBox) zu feist war (hatte *viele* Strings). Also schimpf nicht auf selbstgebastelte Stringklassen! Im Normalfall std::string nehmen (und eventuell CString   ), aber manchmal muss es eben _mein::string_ sein!


----------

