C++ Programm zum drucken der längste Wort der Zeichenfolge?
#include <iostream>
#include <string>
using namespace std;
int main()
{
string s;
getline(cin , s) ; #input of string from user
int counter = 0;
int max_word = -1;
int len = s.length(); #length of string
string max = " ";
string counter_word = " ";
for (int i = 0; i < len; i++)
{
if(s[i] != ' ')
{
counter++;
}
if(s[i] == ' ' || i == len - 1)
{
if(counter > max_word)
{
max_word = counter;
//handling end of string.
if(i == len - 1)
max = s.substr(i + 1 - max_word, max_word); #sub string command that prints the longest word
else
max = s.substr(i - max_word, max_word);
}
counter = 0;
}
}
cout << max_word << " " << max << endl; #output
return 0;
}
Die aktuelle Ausgabe ist '4' auf die Eingabe der Zeichenfolge "das ist cool".
Wie bekomme ich es drucken '4 Dieser; Cool' ?
Auf es läuft in Linux über das terminal, es gibt mir die Fehlermeldung
"kündigen, genannt nach dem werfen einer Instanz von 'std::out_of_range' what(): basic_string::substr Aborted (core dumped) "
- Wollen Sie die Ausgabe aller Wörter wuth die maximale Länge?
- Ja, ich möchte mein Programm zu drucken, alle Worte mit der maximalen Länge der Zeichenkette.
- Warum möchten Sie formatieren Sie den code wie diesem? Warum würden Sie nicht zumindest aufgeräumt es, bevor es zu zeigen Sie zu anderen Menschen? Warum würden Sie nicht zumindest ordentlich es vor und zeigt es anderen Menschen, damit Sie helfen können Sie es beheben??
- Denn das würde zu lange dauern, und Sie bekommen eine Antwort, trotzdem, und, weil Lesen und schreiben sind sterben Fähigkeiten, die diese Tage, wie es scheint 🙁
- Dies ist der Grund, warum ich wünschte, die Menschen wie Vlad würde nicht Antworten auf Fragen wie diese.
- Profitieren Sie von der Lektüre eines C++ - style-guide (diese eine ist von google). Und wenn man über die Formatierung des Codes auf, SO hier.
- Danke @franklin für die mir helfen 🙂 ich werde prüfen, ob aus
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn ich Sie richtig verstanden habe, dann meinen Sie die folgenden
Wenn Sie die EINGABETASTE string
dann wird die Ausgabe
std::istringstream is( s );
Vlad nimmt den input-string und legt ihn in einen anderen stream, er kann analysieren, Wort für Wort. Dann sucht er halt an der Größe der jedes Wort und Aufzeichnungen, die größte Größe, und das Wort gesehen zu diesem Zeitpunkt. Dokumentation auf stringstreamDie grundlegende Idee hier ist, um jeden Charakter eine temporäre (anfangs leere) Zeichenfolge, bis ein Leerzeichen gefunden wird. Auf jedem Fall in einem Raum, die Länge der temporären string ist im Vergleich zu der Länge der "maxword" Zeichenfolge, die aktualisiert wird, wenn es gefunden wird, um mehr. Das temporäre string geleert (zurücksetzen auf null mit '\0'), bevor Sie das nächste Zeichen in der Eingabezeichenfolge.
Meine ursprüngliche Lösung enthielt einen Fehler: Wenn Sie Eingang 2 Wörter der Länge
n
- und 1-Wort der Längen + k
, dann würde der Ausgang dieser drei Wörter.Sollten Sie eine separate if-Bedingung überprüfen Sie, ob das Wort Länge ist die gleiche wie vorher, wenn ja, dann können Sie append
"; "
und das andere Wort.Dies ist, was ich tun würde:Ändernif(counter > max_word)
zuif(counter >= max_word)
so Wörter der gleichen Länge sind auch zu berücksichtigen.diemax
string standardmäßig (also""
statt" "
). (Siehe nächsten Punkt)Fügen Sie eine if-Bedingung in derif(counter >= max_word)
zweite if-Bedingung, um zu sehen, wenn diemax
string nicht leer ist, und wenn Sie nicht leer ist append"; "
Ändernmax =
zumax +=
so dass es fügt die Worte (im zweiten Zustand)empty()
Methode instd::string
, welche true zurückgibt, wenn der string leer ist. Also durch die Folge der if-Ausdruck wäreif (!max.empty()
im Grunde sagen: "wenn max nicht leer ist, dann tun ...". Zum Anhängen eines Strings an einen string benutzen Sie einfachstr.append("something")
. Viel Glück 🙂Wäre es nicht einfacher für Sie, teilen Sie die ganze Zeile in einen Vektor von Strings ?
Dann könnten Sie Fragen, die Länge der einzelnen Elemente der string und dann drucken. Weil Ihr Euch jetzt noch alle Wörter in einem einzigen string jedes einzelne Wort schwer zu analysieren.
Es würde auch schwer sein, wie von Ihnen gewünscht, drucken Sie alle Wörter mit der gleichen Länge, wenn Sie verwenden Sie eine einzelne Zeichenfolge.
EDIT :
Suchen Sie die folgende Webseite, um alle Referenzen über Vektoren. vergessen Sie nicht, #include
http://www.cplusplus.com/reference/vector/vector/
Quelle: http://www.cplusplus.com/forum/beginner/31169/