2016-11-30 7 views
0

Hallo Ich wurde gebeten, eine Aufgabe auszuführen, die die Anzahl der Vokale, Konsonanten, Groß- und Kleinbuchstaben in einer Zeichenfolge berechnet.C# Anzahl der Groß- und Kleinbuchstaben in einer Zeichenfolge

Ich habe Probleme, Groß- und Kleinbuchstaben in einer Zeichenfolge auszuarbeiten. Ich kann die Anzahl der Vokale und Konstanten erfolgreich zählen, aber Groß- und Kleinschreibung scheint ein Schmerz zu sein.

Hier ist der Code:

public void Calculate() 
    { 
     foreach(string sentence in sentenceList) 
     { 
      sentences++; 

      for (int i = 0; i < sentence.Length; i++) 
      { 
       if (vowelsArray.Contains(sentence[i])) 
       { 
        vowels++; 
       } 
       else if (consonantsArray.Contains(sentence[i])) 
       { 
        consonants++; 
       } 
       else if (char.IsUpper(sentence[i])) 
       { 
        upperCaseLetters++; 
       } 
       else if (char.IsLower(sentence[i])) 
       { 
        lowerCaseLetters++; 
       } 
      } 
     } 
    } 

Der Wert für den oberen und Kleinbuchstaben ist 0. Alle Vorschläge

(Es sollte nicht sein)? Vielen Dank!

+0

Sie können dies nur eine einzige Zeile Code tun mit Ober zu überprüfen, dann die gleiche Zeile Code verwenden und Lower 'var cnt = zu überprüfen, ändern Yourstring .Count (c => Char.IsUpper (c)) ' – MethodMan

Antwort

2

Sie haben eine Kette von if/else Anweisungen und die erste Bedingung, die übereinstimmt (entweder die Vokale oder Konsonanten) wird verhindern, dass alle zukünftigen Bedingungen übereinstimmen. Brechen Sie die if/else Kette in 2 Ketten:

  • Vokale vs Consonants
  • Versalien- vs Klein

Siehe aktualisierte Code unten:

public void Calculate() 
    { 
     foreach(string sentence in sentenceList) 
     { 
      sentences++; 

      for (int i = 0; i < sentence.Length; i++) 
      { 
       if (vowelsArray.Contains(sentence[i])) 
       { 
        vowels++; 
       } 
       else if (consonantsArray.Contains(sentence[i])) 
       { 
        consonants++; 
       } 

       // the else was removed here! 
       if (char.IsUpper(sentence[i])) 
       { 
        upperCaseLetters++; 
       } 
       else if (char.IsLower(sentence[i])) 
       { 
        lowerCaseLetters++; 
       } 
      } 
     } 
    } 
+0

Sie sind ein Star! Haha, so eine einfache Lösung. Vielen Dank, –

0
string text = "This is Sample"; 
    int upcount = 0; 
    int lowcount = 0; 
    for (int i = 0; i < text.Length; i++) 
    { 
    if (char.IsUpper(text[i])) upcount++; 
    if (char.IsLower(text[i])) lowcount++; 
    } 
    Console.Write(upcount); 
    Console.Write(lowcount); 

EDIT

In Ihrem Fall es so ändern,

if (char.IsUpper(sentence[i])) 
{ 
    upperCaseLetters++; 
} 
else (char.IsLower(sentence[i])) 
{ 
    lowerCaseLetters++; 
} 
+0

Genau das habe ich in meinem Programm, hast du das getestet und das Ergebnis gesehen? Ich bekomme nur Nullen. –

+0

@ R.Jacobs ja ich habe es getan, es hat funktioniert – Sajeetharan

1

Sie sind nur ein einziger diese Bedingungen jedes Mal durch die Schleife treffen gehen, also, wenn Deine ersten beiden Bedingungen decken jede Möglichkeit ab (was ziemlich wahrscheinlich ist, da alle Vokale und alle Konsonanten abgedeckt sind!), du erreichst niemals deinen dritten und vierten Block.

5

Sie brauchen nicht else vor

else if (char.IsUpper(sentence[i])) 

Weil Sie haben zwei unabhängige Sätze von Bedingungen:

  1. Vokal/Konsonanten
  2. Gross-/Kleinschreibung
+0

braucht das OP sogar die 'sonst wenn' auf Kleinschreibung zu prüfen? Wenn der Buchstabe nicht UpperCase ist, dann ist es offensichtlich LowerCase .. so dass nur eine else-Anweisung sein muss. –

+0

@BviLLe_Kid Was ist, wenn der 'Satz [i]' kein Buchstabe ist? Zum Beispiel ein Leerzeichen oder ein Interpunktionszeichen. – Dmitry

+0

Ich kann das verstehen, aber das klingt wie eine Hausaufgabe, also bezweifle ich, dass die Zeichenfolge Zahlen enthalten würde (ich weiß, was man annehmen soll), aber die OP gab nicht an, dass sie außer Buchstaben alles außer Rechnung stellen müssten. –

0

ich getestet habe dies mit dotnetfiddle

Aber hier ist der Code, der für mich funktionierte:

using System; 
using System.Collections.Generic; 
using System.Linq; 

public class Program 
{ 
    public static void Main() 
    { 
     int upper = 0; 
     int lower = 0; 

     string upperLowerCase = "This Is A Test"; 

     char[] splitString = upperLowerCase.ToCharArray(); 

     for(int i = 0; i < splitString.Length; i++) 
     { 
      if(char.IsUpper(splitString[i])) 
      { 
       upper++;  
      } 
      else 
      { 
       lower++;  
      } 

     } 

     Console.WriteLine("Total Upper Case Letters: " + upper.ToString()); 
     Console.WriteLine("Total Lower Case Letters: " +lower.ToString()); 
    } 
} 

// Output 
// Total Upper Case Letters: 4 
// Total Lower Case Letters: 10 

Aber in Ihrem Fall müssen Sie bedingte Anweisungen trennen. Einer, um nach Vokalen oder Konsonanten zu suchen, und der andere, um den Fall des Briefes zu überprüfen.

So folgt aus:

else if (char.IsUpper(sentence[i])) 
{ 
    upperCaseLetters++; 
} 
else if (char.IsLower(sentence[i])) 
{ 
    lowerCaseLetters++; 
} 

geändert werden muss, um:

if (char.IsUpper(sentence[i])) 
{ 
    upperCaseLetters++; 
} 
else 
{ 
    lowerCaseLetters++; 
} 

Ich hoffe, das hilft!

0

etwas schnellere Version basiert auf Sajeetharan Antwort

string text = "This is Sample"; 
    int upcount = 0; 
    int lowcount = 0; 
    for (int i = 0; i < text.Length; i++) 
    { 
    if (text[i]>64 && text[i]<91) upcount++; 
    else if (text[i]>96 && text[i]<123) lowcount++; 
    } 
    Console.Write(upcount); 
    Console.Write(lowcount); 
Verwandte Themen