Strings speicher?



  • Hallo!

    Wie kann ich in wert, "wert && "+" && i" speichern so dass ich es mit cout ausgeben kann? (so wie in vb hauts jedenfalls net hin 🙂 )

    int sum, i, zahl1, zahl2;
    char wert;
    int summe(int x, int y)
    {
    	sum = 0;
    	i = 0; 
    	wert = 0;
    	for(i=x;i<=y;i++)
    	{
                  if(i%2 == 0)
    		wert = wert && "+" && i;
    	     	sum+=i;
    	}
    	return wert;
    	return sum;
    }
    


  • So ein Unsinn klappt in Visual Basic?? 😮
    Als erstes solltest du dir Gedanken machen über die beiden "Return", alternativ verwendest du einfach Referenzen:

    void foo( int x, int y, int &wert, int &summe )
    {
      // ...
    }
    

    Damit kannst du dir auch die globalen Variablen sparen.

    wert = wert && "+" && i;
    

    Hier weiß ich leider nicht was du genau tuen willst. Wenn das der String sein soll den du speichern willst musst du noch etwas Konvertieren.

    grüße



  • David_pb schrieb:

    So ein Unsinn klappt in Visual Basic?? 😮

    Was fürn Unsinn? Es war Stringkontatenation gemeint und die klappt in VB genauso wie in C++ (oder umgekehrt ...).

    @Diego: Wieso deklarierst Du 'wert' als 'char'? Deklarier's als 'std::string'. Und das Zusammenketten geht über den '+'-Operator. Allerdings hast Du dann das Problem, dass Du die numerischen Werte noch in Strings schreiben musst. Daher wäre es am besten, gleich einen Stringstream zu verwenden:

    std::stringstream wert;
    
    wert << 0;
    
    // ... in der Schleife:
    wert << '+' << i;
    

    Das mit den zwei Rückgabewerten ist natürlich Quatsch.



  • Danke, bin aber leider totaler Anfänger in C++
    das klappt leider so nicht
    Wenn ich als x zb:1 eingebe und als y zb:9
    dann soll folgente ausgaben kommen: 2 Plus 4 Plus 6 Plus 8 = 20 (bzw + 2 + 4 + 6 + 8 = 20)
    Das Rechnen selbst und die Ausgabe der Lösung klappt ja schon, aber die "Rechenschritte" hin schreiben nicht.

    int sum, i, zahl1, zahl2;
    std::stringstream wert;
    int summe(int x, int y)
    {
        sum = 0;
        i = 0;
        wert << 0;
        for(i=x;i<=y;i++)
        {
                  if(i%2 == 0)
                  //wert = wert && "Plus" && i;
                   wert << '+' << i;
                   sum+=i;
        }
       // return wert;
        return sum;
    }
    

    In VB würd das so aussehen (vereinfachte Version):
    [/code]
    For i = in_Zahl To aus_Zahl
    If (i Mod 2) = 0 Then
    s_Anzeige = s_Anzeige & "+" & i
    sUmme = sUmme + i
    End If
    Next i
    MsgBox (s_Anzeige & " = " & sUmme)
    [code]



  • diego2k schrieb:

    In VB würd das so aussehen (vereinfachte Version):
    [/code]
    For i = in_Zahl To aus_Zahl
    If (i Mod 2) = 0 Then
    s_Anzeige = s_Anzeige & "+" & i
    sUmme = sUmme + i
    End If
    Next i
    MsgBox (s_Anzeige & " = " & sUmme)
    [code]

    Genau, und Deinem C++-Code fehlt gewissermaßen das 'End If'. verwende geschweifte Klammern:

    for(i=x;i<=y;i++) {
            if(i%2 == 0) {
                wert << '+' << i;
                sum+=i;
            }
        }
    


  • @Konrad Rudolph:
    Ich habe mit dem Unsinn u.a. die zwei "Return" gemeint...



  • Danke für eure Hilfe, aber ich muss euch nochmal damit belästigen -.-
    Weil es will einfach nicht klappen, wenn man "wert" nicht ausgibt startet das Programm, ich glaub er will das irgendwie in int umwandeln?

    #include <iostream>
    #include <sstream>
    
    using namespace std;
    std::stringstream wert;
    int sum, i, zahl1, zahl2;
    
    int summe(int x, int y)
    {
    	wert << 0;
    	sum = 0;
    	i = 0; 
    
    	for(i=x;i<=y;i++)
    	{		
    		if(i%2 == 0) {
    		sum+=i;
    		wert << "+" << i;
    		}
    	}	
    	return sum, wert;
    }
    int main()	 
    {
    	cout << "zahl eins eingeben: "; 
    		cin >> zahl1;
    	cout << "zahl zwei eingebne: ";
    		cin >> zahl2;
    
    		summe(zahl1,zahl2);
    
    		cout  << wert << "= " << sum  << endl;
    }
    


  • Erstmal ist das sehr fragwürdiger Programmierstil, was du da zusammenbastelst (C++ unterstützt auch lokale Variablen ;)).

    Zweitens ist es immer noch nicht möglich, zwei Werte zurückzugeben (außer du fasst sie zu einem struct zusammen).

    Und drittens kann eine Funktion, die als "int summe(...);" deklariert ist, keinen stringstream zurückgeben.



  • Danke für eure Hilfe
    habs so gelöst:

    int summe(int x, int y)
    {	sum = 0;
    	i = 0; 
    for(i=x;i<=y;i++)
     { 
    	if(i%2==0 && i>x+1)
       	cout << "+";		
    	if(i%2==0)
    	cout << i;
    	if(i%2==0)
    	sum+=i; 
     }
    	return sum;
    }
    


  • So, jetzt solltest du noch deine Variablen lokal deklarieren (merke: Es ist sehr schlecht und fehleranfällig, mit globalen Objekten zu arbeiten - weil du nie weißt, wer sie noch verwenden könnte). Außerdem kannst du hinter einem if() auch mehrere Anweisungen einfügen (in {} eingeschlossen):

    int summe(int x, int y)
    {
      int sum = 0;
      for(int i=x;i<=y;i++)
      { 
        if(i%2==0)
        {
           cout << (i>x+1) ? "+" : "" << i;
           sum+=i;
        }
      }
      return sum;
    }
    

    wobei ich mir noch überlegen würde, ob ich die Ausgabe in die Berechnungsfunktion verlagern würde. Wenn du unbedingt die Liste der summierten Zahlen brauchst, gib der Funktion einen zusätzlichen vector<int>& mit, in den sie alle Zahlen reinsammelt (dann kann das Hauptprogramm entscheiden, ob es die Werte ausgeben, miteinander multiplizieren oder auf Festplatte speichern will).


Anmelden zum Antworten