2017-11-02 4 views
1

Ich versuche, aus einer Datei zu lesen, die Sätze enthält und sie zwei Buchstaben gleichzeitig ausgibt.C++: Wie gebe ich zwei Buchstaben hintereinander aus?

IE: 
    >hello world 

Output: 
     he ll ow or ld 

Hier ist was ich habe.

#include<iostream> 
#include<string> 
#include<fstream> 
#include<vector> 

using namespace std; 

int main() 
{ 
    string input; 

    ifstream infile; 
    infile.open("wordpairs.txt"); 

    while(!infile.eof()) 
    { 
     getline(infile, input); 


     for(int i = 0; i < input.length(); i++) //accidentally posted wrong code last time. My apologies. 
     { 
      cout << input[i] << input[i+1] << " "; 
     } 
     cout << endl; 
    } 



    infile.close(); 
    return 0; 
} 

bearbeiten & Run

und das ist, was es gibt derzeit zum Beispiel sagen können, "Hallo Welt"

output: 
     h he el ll lo ow eo or rl ld d 

Wie behebe ich das? Ich denke, es hat etwas mit meiner for-Schleife zu tun, die Eingabe [i + 1] anruft, aber ich weiß nicht, wie man andere Wörter kombiniert, als das zu tun.

+1

Was haben Sie können nicht möglicherweise kompilieren, aufgrund eines offensichtlichen Tippfehler und wird in einer Zusammenstellung führen Error. Sie können den angezeigten Code möglicherweise nicht ausgeführt haben, wie Sie behaupten. Bitte zeigen Sie echten Code anstelle eines gefälschten Codes. Das einzige, was Sie als Antwort auf gefälschten Code bekommen, sind gefälschte Antworten. Obwohl Ihr Paar Bugs offensichtlich zu sein scheint; Da dies natürlich auch nicht der eigentliche Code ist, der zusammengestellt wurde, ist es wahrscheinlich eine Zeitverschwendung, sie zu diskutieren. –

+1

Sie erhöhen 'i' in Ihrer Schleife um '1', sollte 'i + = 2' sein. Fügen Sie dann innerhalb der Schleife ein Häkchen hinzu, um sicherzustellen, dass Sie nicht auf ein Element außerhalb der Grenzen zugreifen. – cantordust

+1

Ihre gewünschte Ausgabe scheint Leerzeichen zu ignorieren; scheint, als müsste man 'infile >> c1 >> c2;' dann cout << c1 << c2; 'immer und immer wieder nachahmen. (Modulo muss ungleich große Eingaben verarbeiten) – ShadowRanger

Antwort

2

Dies wird alles in Paaren von zwei Buchstaben drucken:

#include <iostream> 

int main() 
{ 
    std::string input = "lo zpxcpzx zxpc pzx cpxz c lol"; 

    for (size_t i = 0, printed = 0; i < input.length(); ++i) 
    { 
     if (isspace(input[i])) 
      continue; 

     std::cout << input[i]; 
     printed++; 

     if (printed % 2 == 0) 
      std::cout << " "; 
    } 

    return 0; 
} 

Drucke:

lo zp xc pz xz xp cp zx cp xz cl ol 
+0

Das hat perfekt funktioniert. Ich danke dir sehr. Nur um meiner selbst willen, lassen Sie mich sehen, wenn ich den Code richtig verstehe, wenn (Issspace (Eingabe [i]) prüft, ob es einen Leerraum in der Eingabe (für das Ende der Zeile)? Wenn das gedruckte/2 einen Rest von 0 hat, dann drucke ein Leerzeichen (für gerade? Buchstaben) und druckt die Eingabe zwei Buchstaben gleichzeitig aus? – TheRealPdGaming

+0

Ja. Es überspringt alle Leerzeichen und druckt nach jeweils 2 Leerzeichen druckt (n% 2 == 0) fügt ein Leerzeichen hinzu –

2

versuche ich i zu ändern ++ + = 2, weil Sie die zweite als erste

+1

Ja, aber was passiert, wenn 'i + 1 == input.length()'? – Amadeus

+0

Müssen auch Zustand hinzufügen – texasbruce

0

Die folgenden nimmt zwei Zeichen in einer Zeit, und sie druckt überspringen müssen. Es verwendet die for-Syntax, um die Zeichen zu initialisieren und dann nur fortzufahren, wenn das Lesen von zwei Zeichen erfolgreich war.

for(char c1{}, c2{}; infile >> c1 >> c2;) { 
    std::cout << c1 << c2 << ' '; 
} 
Verwandte Themen