C#计算字符串中大写和小写字母的数量

时间:2016-11-30 18:47:50

标签: c# string for-loop foreach

您好我被要求做一个计算字符串中元音,辅音,大写和小写字母数量的任务。

我在编写字符串中的大写和小写字母时遇到了麻烦。 我可以成功计算元音和常数的数量,但大写和小写字母似乎很痛苦。

以下是代码:

    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.(不应该)

有什么建议吗?谢谢!

6 个答案:

答案 0 :(得分:5)

之前您不需要else
else if (char.IsUpper(sentence[i]))

因为您有两个独立条件集:

  1. Vowel / Consonant
  2. UpperCase / LowerCase

答案 1 :(得分:2)

您有一系列if / else语句,匹配的第一个条件(元音或辅音)将阻止任何未来条件匹配。将if / else链分成2个链:

  • 元音与辅音
  • 大写与小写

请参阅以下更新代码:

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

答案 2 :(得分:1)

你每次只能通过循环击中这些条件中的一个,所以如果你的前两个条件涵盖了所有可能性(这很可能,因为它涵盖了所有元音和所有辅音!)你从来没有到达你的第三和第四块。

答案 3 :(得分: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++;
}

答案 4 :(得分: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++;
}

我希望这有帮助!

答案 5 :(得分: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);