2016-10-30 3 views
-3

Ich habe eine Aufgabe, die mich auffordert, die folgende Aufgabe zu erledigen: "Lassen Sie einen Benutzer eine Zeichenfolge eingeben. Zeigen Sie dann diese Zeichenfolge wie folgt angezeigt: Zeigen Sie das erste Zeichen in der Zeichenfolge, dann die zuletzt, dann die zweite, dann die vorletzte, dann die dritte ... Wenn also die Zeichenfolge "abcdef" ist, wird Folgendes angezeigt: afbecd (Eingabe "abcdef") " Hier ist mein Ansatz, aber es hat nicht funktioniert Lauf. Ich habe einen Segmentation Fault 11.String mash (Rekursion) C++

#include <iostream> 
#include <cmath> 
using namespace std; 

void printLetters(string s); 

int main() 
{ 
    string sequence; 
    cout << "Enter a sequence: "; 
    getline(cin, sequence); 
    printLetters(sequence); 
} 

void printLetters(string s) 
{ 
    int a = floor(s.length()/2.0); 
    // stopping case 
    if(s == "") 
    { 
    return; 
    } 

    // reduce problem 
    printLetters(s.substr(0)); 
    //cout << s[0]; 
    cout << s[a]; 
} 

Hier ist ein exmaple: 12345. In meiner Funktion printLetters (string s), drucke ich aus der String mit dem Index 0 beginnt, dann habe ich die vollständige Zeichenfolge 12345. Dann Ich "cout" den Inhalt bei Index s.length()/2, das ist das mittlere Zeichen "3". Dann gehe zurück zur Zeichenkette und drucke die Teilzeichenkette wieder ab Index 0 aus, aber diesmal ist es 1245. Ich wiederhole die Schritte, bis ich 1 bekomme. In der Vorlesung erklärte mein Professor, wann die Rekursion das Ende der Prozess wird es von unten wieder nach oben gehen. Dann, wenn ich 1 erreiche, wird es wieder auf 5, 2, 3,4 gehen. Also nehme ich an, ich würde die Zeichenfolge "15234" ausdrucken, aber ich tat es nicht. Wenn Sie eine Idee haben, würde ich gerne zuhören. Danke vielmals!

Hier ist ein weiterer Code, der zum Umkehren einer Zeichenfolge verwendet wird. Mein Professor erklärte im Unterricht, und das war die Logik, die er hinter dem Code gab.

#include <iostream> 
    using namespace std; 
    void printString(string s); 
    int main() 
    { 
    printString("hello"); 
    return 0; 
    } 
    void printString(string s) 
    { 
     if(s == "") 
     { 
     return; 
     } 
     printString(s.substr(1)); 
     cout << s[0]; 
    } 
+0

'Stock (s.length()/2.0)' besser geschrieben als 's.length()/2'. – melpomene

+0

Was meinst du, "dieses Mal ist es 1245 *". "s s (0)" ist wieder "s", d. h. "12345". – melpomene

+0

Versuchen Sie, zuerst einen Debugger zu verwenden ... – Jepessen

Antwort

-1

Versuchen Sie dieses

#include <iostream> 
#include <string> 
using namespace std; 

void printLetters(string s); 

int main() 
{ 
string sequence; 
cout << "Enter a sequence: "; 
getline(cin, sequence); 
printLetters(sequence); 
cout << endl; 
system("pause"); 
} 

void printLetters(string s) 
{ 
int a =s.length(); 
if (a == 0) 
{ 
    return; 
} 
cout << s[0]; 
if(a>1) 
cout<< s[a - 1]; 
s.erase(0, 1); 
a = s.length(); 
if(a>1) 
s.erase(a-1); 
printLetters(s); 
} 

Sie so viel Dank. Es funktioniert perfekt. Denkst du, wir brauchen System ("Pause")? Weil ich es nicht in den Code aufgenommen habe und es immer noch lief. Ich habe die Logik hinter deinem Code vollkommen verstanden. Vielen Dank.

+0

Nein, es ist nicht obligatorisch. Es hängt davon ab, welchen Compiler Sie verwenden. – suleman

-1

Zunächst einmal müssen Sie Bibliothek von String

#include <string> 

Dank umfassen. Entschuldigung, ich kann nichts sagen.