2016-07-19 3 views
-2

Hallo Ich versuche, ein Programm zu machen, die eine Summe als ein Eingang sagen läßt 1 + + 2 dauert 3 + 2 + 2 + 1 und die Summe aussortieren muß 1 + 1 + 2 + 2 + 2 + 3in c Sortierung ++ gibt mir eine leere Ausgabe

dies ist der Code

#include <iostream> 
#include <algorithm> 
#include <string.h> 
using namespace std; 

int main() { 
    string s; 
    char w[100]; 
    char x[100]; 
    cin>>s; 
//moving string s to array w to remove the '+' charachter for sorting 
for (int i=0; i>s.size() ;i++){ 
    if (s.at(i) = '+')continue; 
    else s.at(i) == w[i]; 
} 
//sorting array w 
sort(w,w+100); 
//moving array w to array x and re-adding the '+' after sorting 
for (int y=0; y > s.size();y++){ 
    w[y]==x[y]; 
    x[y+1]=='+'; 
} 
cout<<x; 

return 0; 

}

, aber wenn ich es laufen, es gibt mir eine leere Ausgabe dies mein erstes Mal in einem C++ Programm ich bin immer noch ein Anfänger bei ihm

t hanks für die Hilfe im Voraus!

+1

Wahrscheinlich 'anderes s.at (i) == w [i];' 'sollte w [i] = s [i] sein ; '. – lisyarus

+2

Hier 'für (int i = 0; i> s.size(); i ++) {' Ich denke du meinst: 'für (int i = 0; i s.größe(); y ++) {'. – DimChtz

+1

Auch hier 'if (s.at (i) =' + ') 'sollte es wohl sein:' if (s.at (i) ==' + ') '. – DimChtz

Antwort

0

Ich kann sehen, dass Sie die Sprache neu sind, wie man ein gewisses Verständnis der grundlegenden Konzepte fehlen. Ich werde Ihnen zuerst einige Tipps und Erklärungen zu Ihren Fehlern geben, dann gebe ich Ihnen eine geeignetere Lösung.

Zunächst einmal versuchen, C-Stil-Arrays zu vermeiden verwenden, wie Sie mit w und x tun. Sie sind anfällig für Fehler, weil keine Grenzen zu überprüfen, schauen Sie stattdessen mit std :: vector oder std :: array.

== und = sind nicht gleich! == wird verwendet, wenn zwei Dinge verglichen werden und = wird verwendet, um die rechte Seite der linken Seite zuzuordnen.

Ihre Schleifen sind völlig falsch, wird

for (int i=0; i>s.size() ;i++) 

mit nicht einmal die Schleife ein. Verwenden Sie i < s.size() natürlich. Ich empfehle auch, ++ i anstelle von i ++ zu verwenden, aber das ist nicht so wichtig.

Ihr „in Code“ denkt, ist manchmal zu seltsamen

for (int i=0; i>s.size() ;i++){ 
    if (s.at(i) = '+')continue; 
    else s.at(i) == w[i]; 
} 

(nicht der Betreuung> und = Fehler), warum nicht, wenn es statt continueing nicht ‚+‘ und dann, etwas zu tun?

sollte dieser Code logisch

for (int i=0; i>s.size() ;i++){ 
    if (s.at(i) != '+') s.at(i) == w[i]; 
} 

Last but not least werden, versuchen, konsequent zu sein. Zuerst verwendest du i als Schleifenvariable und das zweite Mal verwendest du y. Nicht, dass es darauf ankommt, aber Konsistenz ist immer gut beim Codieren.

machte ich eine schnelle Lösung für Ihr Problem:

#include <iostream> 
#include <string> 
#include <vector> 
#include <algorithm> 

using namespace std;  
int main() 
{ 
    string input; 
    cin >> input; 

    vector<int> nrs = vector<int>(); //initialising this is not really needed 
    for (char c : input) //range based for loop, prevents mistakes with indices 
    { 
     if (c != '+') 
     { 
      nrs.push_back(c - '0'); // a char minus '0' gives the numerical value 
     } 
    } 

    sort(nrs.begin(), nrs.end()); 

    string answer; 
    for (int nr : nrs) //range based for loop again 
    { 
     answer += to_string(nr); //use to_string to convert an int to a string 

     if (nr != nrs.back()) //to avoid adding the '+' after the last character 
     { 
      answer += '+'; 
     } 
    } 
    cout << answer << endl; 

    return 0; 
}