C# Längsten String ausgeben

b0mMeL

Ensign
Registriert
Nov. 2012
Beiträge
193
Hallo Leute, bin relativ neu im Programmierbereich und hätte eine Frage bzgl. der Thematik Strings.

Und zwar habe ich eine Aufgabe, in der gefordert wird eine Anzahl einzugeben. Diese Anzahl wiederum gilt als Wert
wieviele Texte ich eingeben kann. Und am Ende der Eingabe soll mir der längste Text ausgegeben werden.

Hier das Programm:

Code:
using System;

class DerLängste {
static void Main() {
		
                //1. 	        Programm erfragt eine Anzahl und konvertiert diese in eine ganze Zahl
		//		Zudem definiert die eingegebene Anzahl die Größe des Arrays
		
		Console.Write("Bitte geben Sie eine Anzahl ein: ");
		string Eingabe = Console.ReadLine();
		int Anzahl = Convert.ToInt32(Eingabe);
		
		int Zahl = 0;
		string[] vieleTexte = new string[Anzahl];
		
		
		//2. 	Programm liest mit Hilfe einer Schleife Strings in Höhe der Anzahl
		//		und speichert diese in ein Array
		
		Console.WriteLine();
		Console.WriteLine("Bitte geben Sie "+Anzahl +" Texte ein: ");
		while(Zahl < Anzahl) {
		vieleTexte[Zahl] = Console.ReadLine();
		++Zahl;
		}
		
		//3.	Längsten String ausgeben
		
		int Zahl2 = 0;
		int bgString = vieleTexte[0].Length;
			
		while(Zahl2 < Anzahl) {
		if ( bgString < vieleTexte[Zahl2].Length) 
		{
		bgString = vieleTexte[Zahl2].Length;
		}
		++Zahl2;
		}
		
		Console.WriteLine("------------------------------------------");
		Console.WriteLine("Der längste Text ist -"+"- mit "+bgString+" Zeichen.");
		
	}
}


Wenn ich das Programm abspiele kommt heraus:

Bitte geben Sie eine Anzahl ein: x

Bitte geben sie 5 Texte ein:
x
xx
xxx
xxxx
xxxxx
---------------------------------------------------
Der längste Text ist -- mit x Zeichen.


Mein Problem ist jetzt, dass ich wohl übelst auf dem Schlauch stehe. Ich weiss nicht wie ich nicht nur die Länge des längsten Wortes, sondern auch das längste Wort an sich im Ergebnissatz ausgeben kann.

Console.WriteLine(vieleTexte[Zahl2]);

funktioniert nicht.

Fehlermeldung im Compiler (SDK7): Index was outside the bounds of the array


Wäre für jede Hilfe dankbar :-)

LG
 
Hi,
schaut schon nicht so schlecht aus. Die Fehlermeldung resultiert daraus, dass du versuchst, aus deinem vieleTexte-Array einen Wert an einem Index auszulesen, der außerhalb des Fassungsvermögens des Arrays liegt.
Du musst immer beachten, dass die Indizierung bei 0 beginnt. Ein Array mit der Länge "4" verfügt also über Indizes 0,1,2 und 3. Wenn du versucht auf array[4] zuzugreifen, knallts. Könnte gut sein, dass das in Zeile 33 passiert...
 
Auf die schnelle:
Merk dir zustäzlich zum Indices, die Länge des Wortes in der 35. Zeile -> bgString2 = Zahl2;
Anschließend kannst du über vieleTexte[bgString2] auf das längeste Element und durch vieleTexte[bgString2].Length auf die Länge des längsten Elementes zugreifen.

Probier dir übrigens anzugewöhnen englische Bezeichnungen für Variablen zu verwenden. (Sind kürzer) Dein Code ist jedenfalls grauenhaft zu lesen. (Anstatt Zahl1 und Zahl2 ist i und j üblich) (Nicht böse gemeint, du bist ja Anfänger)
 
Zuletzt bearbeitet:
Jop und für so typische Schleifen mit hochzählen am besten for Schleifen verwenden. Die sind dafür gemacht, besser zu lesen und man macht weniger Fehler :)
 
Code:
//3.	Längsten String ausgeben
		
		int Zahl2 = 0;
		int bgString = vieleTexte[0].Length;
			
		while(Zahl2 < Anzahl) {
		if ( bgString < vieleTexte[Zahl2].Length) 
		{
		bgString = Zahl2;
		}
		++Zahl2;
		}		
		
		Console.WriteLine("------------------------------------------");
		Console.WriteLine("Der längste Text ist -"+vieleTexte[bgString]+"- mit "+vieleTexte[bgString].Length

Super :-) Funktioniert! Danke für die hilfreichen Beiträge, werd mir das zu Herzen nehmen ;-)
 
Mach doch einfach:
Code:
var inOrder = vieleTexte.OrderBy(s => s.Length).ToArray<string>();
Console.WriteLine("Der längste Text ist -"+inOrder[inOrder.Length - 1]+"- mit "+inOrder[inOrder.Length - 1].Length);

Die Frage ist hier nur, was geschehen soll, wenn zwei eingegebene Zeichenfolgen die gleiche Länge haben...
 
Zurück
Oben