2013-07-20 4 views
9

Есть ли код для проверки, является ли символ гласным или согласным? Что-то вроде char = IsVowel? Или нужен жесткий код?Проверьте, является ли символ гласным или согласным?

case ‘a’: 
case ‘e’: 
case ‘i’: 
case ‘o’: 
case ‘u’: 
case ‘A’: 
case ‘E’: 
case ‘I’: 
case ‘O’: 
case ‘U’: 
+0

думать логику и сделать его метод расширения.':)' –

+0

Проверьте эту [C# программу, чтобы проверить, является ли входной символ гласным или нет) (http://www.msccomputerscience.com/2014/04/c-program-to-check-whether-input_23.html) – ARJUN

ответ

20

Вы можете сделать это:.

char c = ... 
bool isVowel = "aeiouAEIOU".IndexOf(c) >= 0; 

или это:

char c = ... 
bool isVowel = "aeiou".IndexOf(c.ToString(), StringComparison.InvariantCultureIgnoreCase) >= 0; 

После добавления международной поддержки такие вещи, как éèe̋ȅëêĕe̊æøи et c. эта строка будет длинной, но основное решение будет таким же.

+2

Или для .NET 3.5 или более поздней версии, просто '' aeiouAEIOU ".Contains (c)'. –

+0

@ JukkaK.Korpela Потому что это не всегда. В «Почему» это считается гласным, в то время как в «Зеве» это согласный. – aevitas

+0

Неинварианткультура заботится о éèe̋ȅëêĕe̊æøи? Итак, é = e, и вам не нужно добавлять их в строку. – gijswijs

0

Вы можете сделать что-то подобное в

private bool IsCharacterAVowel(char c) 
    { 
    string vowels = "aeiou"; 
    return vowels.IndexOf(c.ToString(),StringComparison.InvariantCultureIgnoreCase) >= 0;  
    } 
+1

Это чувствительный к регистру –

+1

@SriramSakthivel Он хотел, чтобы идея не работала. написанный псевдокодом, чтобы дать представление о том, что он должен делать. – Ehsan

7

Вот функция, которая работает:

public static class CharacterExtentions 
{ 
    public static bool IsVowel(this char c) 
    { 
     long x = (long)(char.ToUpper(c)) - 64; 
     if (x*x*x*x*x - 51*x*x*x*x + 914*x*x*x - 6894*x*x + 20205*x - 14175 == 0) return true; 
     else return false; 
    } 
} 

Используйте его как:

char c = 'a'; 
if (c.IsVowel()) { // it's a Vowel!!! } 

(Да, это действительно работает, но, очевидно, это шутка ответ. Не меняйте ни слова.)

+1

Anonymous Downvoter - вы, очевидно, не выполнили мои инструкции. Или, может быть, ты и сделал - я не уверен. ;) –

+0

Не мой нисходящий, но я предполагаю, что причина в том, что вы не объяснили, как это работает. Также случается, чтобы вернуть true для

+1

Интересно, что «dotless lowercase i» возвращает «true» - это должно быть причудой 'char.ToUpper'. Что касается того, чтобы не объяснять, как это работает, как и большинство анекдотов (как я ясно это обозначил как шутка), если я должен это объяснить, тогда все это устраивает. Я подумал, что будут две группы людей - те, кто сразу понял, как это работает, и будет ценить «изобретательность» (как бы там ни было большая часть), и тех, кто не получил ее сначала, но мог бы повеселиться время выясняя это. Конечно, если кто-то не может понять это и спрашивает, тогда я буду рад объяснить. –

0

Почему бы не создать e массив гласных/согласных и проверить, находится ли значение в массиве?

1

Вы можете использовать «IsVowel», как вы хотели. Однако единственное, что, вероятно, не имеет библиотеки или функции C# по умолчанию, которая уже делает это из коробки, ну, если это то, что вы хотели. Для этого вам нужно написать метод утилиты.

bool a = isVowel('A');//example method call 

public bool isVowel(char charValue){ 
    char[] vowelList = {'a', 'e', 'i', 'o', 'u'}; 

    char casedChar = char.ToLower(charValue);//handle simple and capital vowels 

    foreach(char vowel in vowelList){ 
     if(vowel == casedChar){ 
      return true; 
     } 
    } 

    return false; 
}  
+2

Это не C#, очевидно, что именно OP отмечал свой вопрос как. –

+0

Ах, ваше право пропустило это, и оно было изначально написано на Java, оно теперь находится на C# – MilindaD

5

Нет. Вам нужно сначала определить, что вы считаете гласным и как согласный. Например, на английском языке «y» может быть согласным (как в «да») или гласным (как в «по»). Письма типа «é» и «ü», вероятно, являются гласными на всех языках, на которых они используются, но кажется, что вы их вообще не рассматривали. Прежде всего, вы должны определить , почему вы хотите классифицировать буквы как согласные и гласные.

1

Вы можете использовать следующий метод расширения:

using System; 
using System.Linq; 

public static class CharExtentions 
{ 
    public static bool IsVowel(this char character) 
    { 
     return new[] {'a', 'e', 'i', 'o', 'u'}.Contains(char.ToLower(character)); 
    } 
} 

использовать его как:

'c'.IsVowel(); // Returns false 
'a'.IsVowel(); // Returns true 
2
Console.WriteLine("Please input a word or phrase:"); 
string userInput = Console.ReadLine().ToLower(); 

for (int i = 0; i < userInput.Length; i++) 
     { 
      //c stores the index of userinput and converts it to string so it is readable and the program wont bomb out.[i]means position of the character. 
      string c = userInput[i].ToString(); 
      if ("aeiou".Contains(c)) 
      { 
       vowelcount++; 
      } 
     } 
     Console.WriteLine(vowelcount); 
0
return "aeiou".Any(c => c.Equals(Char.ToLowerInvariant(myChar))); 
0

Попробуйте это:

char[] inputChars = Console.ReadLine().ToCharArray(); 
int vowels = 0; 
int consonants = 0; 
foreach (char c in inputChars) 
{ 
    if ("aeiou".Contains(c) || "AEIOU".Contains(c)) 
    { 
     vowels++; 
    } 
    else 
    { 
     consonants++; 
    } 
} 
Console.WriteLine("Vowel count: {0} - Consonant count: {1}", vowels, consonants); 
Console.ReadKey(); 
0

Это работает отлично.

public static void Main(string[] args) 
    { 
     int vowelsInString = 0; 
     int consonants = 0; 
     int lengthOfString; 
     char[] vowels = new char[5] { 'a', 'e', 'i', 'o', 'u' }; 

     string ourString; 
     Console.WriteLine("Enter a sentence or a word"); 
     ourString = Console.ReadLine(); 
     ourString = ourString.ToLower(); 

     foreach (char character in ourString) 
     { 
      for (int i = 0; i < vowels.Length; i++) 
      { 
       if (vowels[i] == character) 
       { 
        vowelsInString++; 
       } 
      } 
     } 
     lengthOfString = ourString.Count(c => !char.IsWhiteSpace(c)); //gets the length of the string without any whitespaces 
     consonants = lengthOfString - vowelsInString; //Well, you get the idea. 
     Console.WriteLine(); 
     Console.WriteLine("Vowels in our string: " + vowelsInString); 
     Console.WriteLine("Consonants in our string " + consonants); 
     Console.ReadKey(); 
    } 
} 
0

Посмотрите на этот код, чтобы проверить, как для гласных и согласных, C#

private static void Vowel(string value) 
{ 
    int vowel = 0; 
    foreach (var x in value.ToLower()) 
    { 
     if (x.Equals('a') || x.Equals('e') || x.Equals('i') || x.Equals('o') || x.Equals('u')) 
     { 
      vowel += 1; 
     } 
    } 
    Console.WriteLine(vowel + " number of vowels"); 
} 

private static void Consonant(string value) 
{ 
    int cont = 0; 
    foreach (var x in value.ToLower()) 
    { 
     if (x > 'a' && x <= 'd' || x > 'e' && x < 'i' || x > 'j' && x < 'o' || x >= 'p' && x < 'u' || x > 'v' && x < 'z') 
     { 
      cont += 1; 
     } 
    } 
    Console.WriteLine(cont + " number of consonant"); 
}