【问题标题】:C# Counting the number of upper and lower case letters in a stringC#计算字符串中大小写字母的个数
【发布时间】:2016-11-30 18:47:49
【问题描述】:

您好,我被要求执行一项任务,计算字符串中元音、辅音、大小写字母的数量。

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

代码如下:

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

有什么建议吗?谢谢!

【问题讨论】:

  • 您可以使用一行代码来检查 Upper 然后使用相同的单行代码并将其更改为检查 Lower var cnt = YourString.Count(c =&gt; Char.IsUpper(c))

标签: c# string for-loop foreach


【解决方案1】:

你之前不需要else

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

因为您有两组独立条件:

  1. 元音/辅音
  2. 大写/小写

【讨论】:

  • OP 甚至需要else if 来检查小写字母吗?如果字母不是大写,那么显然它将是小写..所以只需要一个 else 语句。
  • @BviLLe_Kid 如果sentence[i] 不是字母怎么办?例如,空格或标点符号。
  • 我可以理解,但这听起来像是一个家庭作业,所以我怀疑该字符串是否包含数字(我知道假设是什么意思),但 OP 没有说明他们必须考虑除了字母之外的任何东西。
  • @BviLLe_Kid 您可以向 OP 询问假设。但 IMO 它与 OP 的问题无关。
【解决方案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++;
                }
            }
        }
    }

【讨论】:

  • 你是明星!哈哈,这么简单的解决方法。谢谢,
【解决方案3】:

您每次通过循环只会遇到其中一个条件,因此如果您的前两个条件涵盖所有可能性(这很可能,因为它涵盖了所有元音和所有辅音!)您永远无法达到你的第三个和第四个街区。

【讨论】:

    【解决方案4】:

    我已经使用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】:
        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。
      【解决方案6】:

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

      【讨论】:

        猜你喜欢
        • 2020-01-04
        • 2020-08-28
        • 1970-01-01
        • 2017-03-05
        • 1970-01-01
        • 2014-10-03
        • 1970-01-01
        • 1970-01-01
        • 2015-05-11
        相关资源
        最近更新 更多