Laut Deiner Aufgabenstellung hängt das garnicht zusammen.
Ein Feld bietet Dir lediglich eine "übersichtliche" Speicherung Deiner Daten.
Stell Dir vor es gäbe keine Felder oder ähnliche Strukturen. Dann würde Dein Code vielleicht so ausehen:
//Variablen für das zählen der verscheidenen Buchstaben, unter Vernachlässigung von Zahlen und Satzzeichen
long a = 0;
long b = 0;
long c = 0;
long d = 0;
...
long z = 0;
Da hättest Du dann 26 verschiedene Variablen die Du hochzählen würdest und die Du irgendwie ansprechen müsstest. Vielleicht in etwa so:
...
char buchstabe = text[i]; //gibt Dir der Reihe nach alle Buchstaben zurück
switch(buchstabe)
{
[INDENT]case 'a': {a = a + 1; break; }[/INDENT]
[INDENT]case 'b': {b = b + 1; break; }[/INDENT]
[INDENT]case 'c': {c = c + 1; break; }[/INDENT]
[INDENT]...[/INDENT]
[INDENT]case 'z': {z = z + 1; break; }[/INDENT]
[INDENT]case default: { break;} //ungültiges Zeichen[/INDENT]
}
...
Die Ausgabe der gezählten Buchstaben sieht dann auch wieder ähnlich umständlich aus.
Und vom Sortieren will ich hier garnicht erst anfangen :-)
Deshalb bietet es sich an Felder zu verwenden. (oder wie von bigredeyes erwähnt, ne List oder ne Map).
Ich würde für diesen Fall das einfache Feld bevorzugen da es bei sehr großen Texten performanter sein dürfte. (kannste ja mal mit der Bibel als eBook versuchen)
Das Feld kann man auf verschiedene Weisen erstellen.
Auch wenn man nicht den kompletten Zeichensatz verwendet würde ich der Einfachheit halber erstmal ein Feld der größe 256 erstellen.
int[] zeichenhäufigkeit = new int[256];
Die Buchstaben (und Zahlen, ...) wie Du sie kennst haben in der Asciitabelle auch eine Dezimaldarstellung.
A = 65, B = 66, ..., Z = 90
bzw.
a = 97, b = 98, ..., z = 122
Diese Umwandlung lässt sich in C# folgenderweise machen
int dez = (int)zeichen;
Diesen Wert kann man nun innerhalb des Feldes als Index verwenden, und somit z.B. für ein 'A' an der Stelle 65 im Feld den "Zähler" erhöhen:
zeichenhäufigkeit[dez] += 1;
// bzw.
zeichenhäufigkeit[dez] = zeichenhäufigkeit[dez] + 1;
Das ganze tust Du dann für alle Zeichen.
Wenn Du nun nur kleine oder große Zeichen verwenden willst verwendest Du wie schon erwähnt die Methode "toUpper()" oder "toLower()".
Diese Funktion liefert auch wieder einen String zurück.
Daher (mindestens) 2 Möglichkeiten.
Entweder Du überschreibst die "alte" Variable oder legst den Text dann auf eine neue.
string eingabe;
...
//Variante 1
eingabe = eingabe.ToLower();
//Variante 2
String kleinerText = eingabe.ToLower();
So, ich hoffe das hilft Dir erstmal weiter. Ansonsten gibts viele Quellen im Netz wo man so die Grundlagen gut erklärt bekommt.