9

私は C# のプログラミングを学んでおり、母音を数えようとしています。プログラムに文をループさせるようにしていますが、母音の数を返す代わりに、文字列の長さを返すだけです。どんな助けでも大歓迎です。

    static void Main()
    {
        int total = 0;

        Console.WriteLine("Enter a Sentence");
        string sentence = Console.ReadLine().ToLower();

        for (int i = 0; i < sentence.Length; i++)
        {
            if (sentence.Contains("a") || sentence.Contains("e") || sentence.Contains("i") || sentence.Contains("o") || sentence.Contains("u"))
            {
                total++;
            }
        }
        Console.WriteLine("Your total number of vowels is: {0}", total);

        Console.ReadLine();
    }
4

19 に答える 19

29

現在、文全体containsに母音があるかどうかを、文字ごとに 1 回チェックしています。代わりに、個々の文字を確認する必要があります。

   for (int i = 0; i < sentence.Length; i++)
    {
        if (sentence[i]  == 'a' || sentence[i] == 'e' || sentence[i] == 'i' || sentence[i] == 'o' || sentence[i] == 'u')
        {
            total++;
        }
    }

そうは言っても、これをかなり単純化できます。

static void Main()
{
    int total = 0;
    // Build a list of vowels up front:
    var vowels = new HashSet<char> { 'a', 'e', 'i', 'o', 'u' };

    Console.WriteLine("Enter a Sentence");
    string sentence = Console.ReadLine().ToLower();

    for (int i = 0; i < sentence.Length; i++)
    {
        if (vowels.Contains(sentence[i]))
        {
            total++;
        }
    }
    Console.WriteLine("Your total number of vowels is: {0}", total);

    Console.ReadLine();
}

LINQ を使用する場合は、さらに単純化できます。

static void Main()
{
    // Build a list of vowels up front:
    var vowels = new HashSet<char> { 'a', 'e', 'i', 'o', 'u' };

    Console.WriteLine("Enter a Sentence");
    string sentence = Console.ReadLine().ToLower();

    int total = sentence.Count(c => vowels.Contains(c));
    Console.WriteLine("Your total number of vowels is: {0}", total);
    Console.ReadLine();
}
于 2013-08-07T17:29:13.590 に答える
3

これは、if ステートメントが常に true であるためです。文に母音が含まれているかどうかを確認するのではなく、文 [i] の文字を比較して母音かどうかを確認する必要があります。

于 2013-08-07T17:29:59.750 に答える
2

またはlinqで。

static void Main()
    {
        int total = 0;

        Console.WriteLine("Enter a Sentence");
        string sentence = Console.ReadLine().ToLower();
        char[] vowels = { 'a', 'e', 'i', 'o', 'u' };

        total = sentence.Count(x => vowels.Contains(x));

        Console.WriteLine("Your total number of vowels is: {0}", total);

        Console.ReadLine();
    }
于 2013-08-07T17:30:58.653 に答える
1
int cnt = 0;
for (char c in sentence.ToLower())
    if ("aeiou".Contains(c))
       cnt++;
return cnt;
于 2013-08-07T17:31:07.127 に答える
1

猫の皮を剥ぐ方法はたくさんあります :-) プログラミングでは、横方向の思考が少し役に立ちます...

total += sentence.Length - sentence.Replace("a", "").Length;
total += sentence.Length - sentence.Replace("e", "").Length;
total += sentence.Length - sentence.Replace("i", "").Length;
total += sentence.Length - sentence.Replace("o", "").Length;
total += sentence.Length - sentence.Replace("u", "").Length;

たとえば、文から母音を削除して、母音なしで文がどれだけ小さくなるかを調べることができます。

于 2013-08-07T17:43:05.920 に答える
0

文中の母音と子音の文字を数えるアプリケーション。これは、char 配列でループと入れ子になったループを使用するという考え方を理解した上で、コード行を減らした別のソリューションです。

コントロール名を持つアプリケーション インターフェイス:

コントロール名を持つアプリケーション インターフェイス

namespace Program8_4
{
  public partial class Form1 : Form
  {
    // declare the counter variables in field
    int iNumberOfVowels = 0;
    int iNumberOfConsonants = 0;
    public Form1()
    {
        InitializeComponent();
    }

    private void btnFind_Click(object sender, EventArgs e)
    {
        // call the methods in this event
        GetVowels(txtStringInput.Text);
        GetConsonants(txtStringInput.Text);
        // show the result in a label
        lblOutput.Text = "The number of vowels : " + iNumberOfVowels.ToString()+ Environment.NewLine+
            "The number of consonants : " + iNumberOfConsonants.ToString();
        // assign zero the counters to not add the previous number to new number, and start counting from zero again
        iNumberOfVowels = 0;
        iNumberOfConsonants = 0;

    }

    private int GetConsonants(string strFindConsonants)
    {
        // Declare char array to contain consonants letters
        char[] chrConsonants = { 'B', 'C', 'D', 'F', 'G', 'H', 'J', 'K', 'L', 'M', 'N', 'P', 'Q', 'R', 'S', 'T', 'V', 'X',
            'b', 'c', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'm', 'n', 'p', 'q', 'r', 's', 't', 'v', 'x' };

        // loop to get each letter from sentence
        foreach (char Consonants in strFindConsonants)
        {
        // another nested loop to compare each letter with all letters contains in chrConsonants array
            for (int index= 0; index<chrConsonants.Length;index++)
            {
                // compare each letter with each element in charConsonants array
                if (Consonants == chrConsonants[index])

                {
                    // If it is true add one to the counter iNumberOfConsonants
                    iNumberOfConsonants++;
              }

            }
        }
        // return the value of iNumberOfConsonants
        return iNumberOfConsonants;
    }

    private int GetVowels(string strFindVowels)

    {
        // Declare char array to contain vowels letters
        char[] chrVowels = { 'a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O','U' };

        // loop to get each letter from sentence
        foreach (char Vowels in strFindVowels)
        {
            // another nested loop to compare each letter with all letters contains in chrVowels array
            for (int index = 0; index< chrVowels.Length; index++)
            {
                // compare each letter with each element in chrVowels array
                if (Vowels == chrVowels[index])

            {
                    // If it is true add one to the counter iNumberOfVowels
                    iNumberOfVowels = iNumberOfVowels+1;

            }
            }
        }
        // return the value of iNumberOfVowels
        return iNumberOfVowels;
    }
于 2016-11-05T18:57:00.713 に答える
0

正規表現を使用して、文の母音を一致させることができます。

Regex.Matches()関数は、すべての母音を含む配列を返します。次に、count プロパティを使用して、母音の数を見つけることができます。

文字列の母音に一致する正規表現: [aeiouAEIOU]+

以下は、実際のコード スニペットです。

 public static void Main()
   {
       string pattern = @"[aeiouAEIOU]+";
       Regex rgx = new Regex(pattern);
       string sentence = "Who writes these notes?";
       Console.WriteLine(rgx.Matches(sentence).Count);
   }
于 2020-05-13T20:28:24.640 に答える
0

スターターとしては高度すぎるかもしれませんが、これは C# で行う方法です。

var vowels = new[] {'a','e','i','o','u'};

Console.WriteLine("Enter a Sentence");
var sentence = Console.ReadLine().ToLower();

var vowelcount = sentence.Count(x => vowels.Contains(x));

Console.WriteLine("Your total number of vowels is: {0}", vowelcount);
Console.ReadLine();
于 2013-08-07T17:32:23.050 に答える
-1
void main()
{
    int x=0;
    char ch;
    printf("enter a statement:");
    while((ch=getche())='\r')
    {
        if(ch=='a'||ch=='e'||ch=='i'||ch=='o'||ch=='u')
        x++;
    }
    printf("total vowels=");
    getch();
}
于 2015-06-14T12:02:41.847 に答える