2016-11-30 70 views
0

嗨我已經被要求做一個任務,它計算字符串中的元音,輔音,大寫和小寫字母的數量。C#計算字符串中大寫和小寫字母的數量

我在處理字符串中的大寫和小寫字母時遇到了麻煩。 我可以成功地計算元音和常量的數量,但大寫和小寫字母看起來很痛苦。

下面的代碼:

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++; 
       } 
      } 
     } 
    } 

的大寫和小寫字母的值爲0(它不應該)

有什麼建議?謝謝!

+0

那麼您可以使用一個單一的代碼行檢查上,然後使用相同的代碼一行,並改變它來檢查下 'VAR CNT做= YourString .Count(c => Char.IsUpper(c))' – MethodMan

回答

2

你有一個的鏈條/else陳述和匹配的第一個條件(元音或輔音)將阻止任何未來條件匹配。打破if/else鏈分爲2個鏈:

  • 元音VS輔音
  • 大寫VS小寫

見下更新的代碼:

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

你是明星!哈哈這樣一個簡單的修復。謝謝, –

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); 

編輯

你的情況,改變它這個樣子,

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

這正是我在我的程序中所做的,你測試過這個並看到了結果嗎?我只是0。 –

+0

@ R.Jacobs是的,我已經做到了,它的工作 – Sajeetharan

1

你只是通過循環打的這些條件缺一每一次,所以如果你的前兩個條件涵蓋了所有可能性(這很可能,因爲它涵蓋所有元音和所有輔音!),你永遠不會達到你的第三和第四塊。

5

你不需要else

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

因爲你有兩個獨立套的條件:

  1. 元音/輔音
  2. 大/小寫
+0

做的OP甚至需要'else if'來檢查小寫嗎?如果該字母不是UpperCase,那麼顯然它會是LowerCase ..所以只需要一個else語句。 –

+0

@BviLLe_Kid如果'sentence [i]'不是一個字母怎麼辦?例如,空格或標點符號。 – Dmitry

+0

我可以理解,但這聽起來像是一項家庭作業,所以我懷疑這個字符串會包含數字(我知道假設的意思),但是OP沒有聲明除了字母之外,他們不得不考慮其他任何東西。 –

0

我已經測試此使用dotnetfiddle

但是這裏是我工作的代碼:

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 

但在你的情況下,你需要單獨的條件語句。一個檢查元音或輔音,另一個檢查信件的情況。

所以這個:

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

需要改爲:

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

我希望這有助於!

0

基於Sajeetharan的回答稍快的版本

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); 
相關問題