0

私は自分自身にC#を教えていますが、現在の章の課題の1つで、ユーザーに文字列の入力を求め、文字列を書き戻し、文字数、文字「e」のインスタンス、最後にすべての母音のインスタンスを数えます。それは使用するためのヒントを与えましたswitchが、私はそれを行う方法を理解できませんでした。手動で動作させることはできましたが、それがポイントではないと思います。switch:)ステートメントを使用して、型指定された行の数を減らすにはどうすればよいですか?

Console.WriteLine("Please type a sentence and hit enter: ");

string myString = Console.ReadLine();

int letterCount = myString.Split('e').Length - 1;

Console.Clear();
Console.WriteLine("Thank you.  The sentence you entered was: \n\"{0}\"", myString);
Console.WriteLine("This sentence is {0} characters long.", myString.Length);
Console.WriteLine("It contains {0} instances of the letter \'e\'.", letterCount);

int vowelCount = 0;
int letterALower = myString.Split('a').Length - 1;
vowelCount += letterALower;

int letterELower = myString.Split('e').Length - 1;
vowelCount += letterELower;

int letterILower = myString.Split('i').Length - 1;
vowelCount += letterILower;

int letterOLower = myString.Split('o').Length - 1;
vowelCount += letterOLower;

int letterULower = myString.Split('u').Length - 1;
vowelCount += letterULower;

int letterAUpper = myString.Split('A').Length - 1;
vowelCount += letterAUpper;

int letterEUpper = myString.Split('E').Length - 1;
vowelCount += letterEUpper;

int letterIUpper = myString.Split('I').Length - 1;
vowelCount += letterIUpper;

int letterOUpper = myString.Split('O').Length - 1;
vowelCount += letterOUpper;

int letterUUpper = myString.Split('U').Length - 1;
vowelCount += letterUUpper;

Console.WriteLine("There are {0} vowels used.", vowelCount);
Console.ReadLine();
4

4 に答える 4

4

これが質問に対する適切な答えではないことはわかっていますが、1 つのライナーに抵抗することはできませんでした。

inputString.ToLower().Count(s=>"aeiou".Contains(s)); //count the vowels
于 2012-06-18T01:31:39.557 に答える
2

簡単な解決策は次のとおりです。

string str = Console.ReadLine();
string low_str = str.ToLower();
Console.Clear();
Console.WriteLine("Thank you.  The sentence you entered was: \n\"{0}\"", str);
Console.WriteLine("This sentence is {0} characters long.", str.Length);

int vowelCount = 0;
int eCount = 0;

for (int i = 0; i < low_str.Length; i++)
{
    switch(low_str[i])
    {
        case 'e': eCount ++; vowelCount++; break;
        case 'a': vowelCount++; break;
        case 'o': vowelCount++; break;
        case 'i': vowelCount++; break;
        case 'u': vowelCount++; break;
        case 'y': vowelCount++; break;
    }
}

Console.WriteLine("It contains {0} instances of the letter \'e\'.", eCount);
Console.WriteLine("There are {0} vowels used.", vowelCount);
Console.ReadLine();

これは、このメソッドを使用してさらに少ない行で実行できることに注意してください(最善の方法ではありませんが、フレームワークの詳細に深く入り込まないようにしましょう:)):

int eCount = low_str.split(new char[]{'e'}) - 1;
int vowelCount = low_str.split(new char[]{'a','e','o','i','u','y'}) - 1;
于 2012-06-18T00:21:20.213 に答える
1

私は個人的にforeachと配列または母音でそれを行います。このように、次のように簡単に拡張できます。

Char[] vowels = {'e', 'a', 'o', 'i', 'u', 'y'};
string str = Console.ReadLine();
string low_str = str.ToLower();
Console.Clear();
Console.WriteLine("Thank you.  The sentence you entered was: \n\"{0}\"", str);
Console.WriteLine("This sentence is {0} characters long.", str.Length);

int vowelCount = 0;
int eCount = 0;

foreach (char chara in low_str)
{
    foreach (char vowel in vowels)
    if (vowel == chara)
        vowelCount++;
    if (chara == 'e')
        eCount++;
}

Console.WriteLine("It contains {0} instances of the letter \'e\'.", eCount);
Console.WriteLine("There are {0} vowels used.", vowelCount);
Console.ReadLine();
于 2012-06-18T00:38:46.133 に答える
1

このようなもの(実際のC#ではなく擬似コード)?

foreach (c in mySentence)
{
  c = LowerCase(c);
  switch (c) {
    case 'a' :
    case 'e' :
    case 'i' :
    case 'o' :
    case 'u' :
      nVowels ++;
      break;
    case ' ' :
    case '\t' :
      nBlanks++;
      break;
    default :
      nChars++
      break;
  }

ここにもう少し情報があります:

于 2012-06-18T00:22:50.963 に答える