2017-03-07 4 views
0

Ich arbeite in C++, also begann ich, ein System zu machen, die einen Satz in einem 2D-Array von Zeichen öffnen. Nachdem ich versucht habe, Probleme damit zu lösen, habe ich es funktioniert, aber nicht so, wie es angenommen wurde.Ich habe Probleme mit Char Handhabung

#include <iostream> 
#include <cstring> 

using namespace std; 

void backword(char* input, char* output[]) 
{ 
    for(int i = 0, c = 0; strlen(input)>i; i++) 
    { 
     if(input[i] == ' ') 
     { 
      c++; 
      i++; 
     } 
     output[c] += input[i]; 
    } 
    cout << output[1]; //debug 
} 

int main() 
{ 
    char** output = new char*[30]; 
    backword("dfs sdfsdfsd dsffsdf", output); 
    cout << output[1]; //dubug 
    return 0; 
} 

Also was ist das Problem ?: Es etwas nicht zeigen, nach meiner debug es meine Array scheint nicht

geändert wird

Weitere Details: Dieser Code, den ich in Visual Studio versucht, nicht funktioniert, versucht in Code :: Blöcke, gleiches Ergebnis. Ursprünglich sollte ein Zeiger char ** zurückgegeben werden, aber ich begann mit dieser Methode, und ich habe keine Kompilierungsfehler.

P.S: Tut mir leid, wenn es ein dummer Fehler ist, aber ich habe vorher noch nie mit Zeichen gearbeitet.

Vielen Dank.

+2

Sie nie Speicher für die in 'output' gehalten Zeiger zuweisen. –

+2

Da dies C++ ist, sollten Sie keine rohen Zeichenzeiger verwenden, aber Sie sollten mit 'std :: string' arbeiten. Dein Weg ist eher der C-Weg. Und du vergisst zu erwähnen, was dein Programm tun soll. –

+0

Ich schätze, Sie fehlen Dereferenz in Zeile 'cout << * Ausgabe [1]; // debug ', dann übergibst du temporäres Objekt an Funktion, ich denke, es ist nach Funktionsende zerstört und ich bin mir nicht sicher mit der Speicherzuweisung ... –

Antwort

1

Ich bin mir nicht sicher, ob ich das Problem richtig verstehe. Es scheint, als ob Sie versuchen, den Satz in die Wortgruppe aufzuteilen.

Ein bisschen komisch, dass Sie keine String-Funktionen von C++ verwenden, aber sagen wir, Sie haben die Gründe dafür.

Wenn Sie den Satz geteilt werden soll, sollten Sie so etwas tun:

Haftungsausschluss: Die Lösung funktioniert für Wörter kürzer als 30 Symbole, weniger als 30 Wörter Satz, Speicherbeschädigung sonst ...

void backword(char* input, char output[][30]) 
{ 
    int index_c = 0; 
    int c = 0; 
    for (int i = 0; strlen(input) > i; i++) 
    { 

     if (input[i] == ' ') 
     { 
      c++; 
      index_c = 0; 
     } 
     else 
      output[c][index_c++] = input[i]; 
    } 

    cout << output[1]; //debug 
} 

int main() 
{ 
    char output[30][30]; 
    memset(output, 0, sizeof(output)); 
    backword("dfs sdfsdfsd dsffsdf", output); 
    cout << output[1]; //dubug 
    return 0; 
} 

Aber ich denke, dass Ihnen die Arbeit mit Strings ....

+0

Funktioniert überhaupt nicht, korrigieren Sie diese Antwort oder löschen Sie sie, bevor sie nach unten verschoben wird. Und was passiert, wenn ein Wort mehr als 30 Buchstaben hat? –

+0

gut, es getestet und funktioniert, und natürlich Begrenzung von 30 Symbolen, wenn in der Frage des Benutzers und Benutzer muss es notieren ... –

+0

Was ist die erwartete Leistung Ihrer Lösung? –