是否有代码检查角色是元音还是辅音?像char = IsVowel这样的东西?还是需要硬编码?
case ‘a’:
case ‘e’:
case ‘i’:
case ‘o’:
case ‘u’:
case ‘A’:
case ‘E’:
case ‘I’:
case ‘O’:
case ‘U’:
答案 0 :(得分:28)
你可以这样做:
char c = ...
bool isVowel = "aeiouAEIOU".IndexOf(c) >= 0;
或者这个:
char c = ...
bool isVowel = "aeiou".IndexOf(c.ToString(), StringComparison.InvariantCultureIgnoreCase) >= 0;
一旦为éèe̋ȅëêĕe̊æøи
等内容添加国际支持,此字符串将变长,但基本解决方案是相同的。
答案 1 :(得分: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!!! }
(是的,它 真的有用 ,但很明显,这是一个笑话答案。请不要贬低我。或其他什么。)
答案 2 :(得分:5)
没有。您需要首先定义您认为的元音和辅音。例如,在英语中,“y”可以是辅音(如“是”)或元音(如“by”)。像“é”和“ü”这样的字母可能是使用它们的所有语言中的元音,但似乎你根本不考虑它们。首先,您应该定义为什么您希望将字母分类为辅音和元音。
答案 3 :(得分:3)
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);
答案 4 :(得分:1)
您可以根据需要使用“IsVowel”。然而,唯一的问题是可能没有默认的C#库或功能已经开箱即用,如果这是您想要的。您需要为此编写一个util方法。
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;
}
答案 5 :(得分: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
答案 6 :(得分:1)
这很好用。
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();
}
}
答案 7 :(得分:1)
其他方法给予了工作。在这里,我关注表现。对于我测试的两种方法 - 使用LINQ的Any方法并使用位算术,位运算的使用速度提高了十倍以上。结果:
LINQ = 117毫秒的时间
位掩码的时间= 8毫秒
public static bool IsVowelLinq(char c)
{
char[] vowels = new[] { 'a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U' };
return vowels.Any(ch => ch == c);
}
private static int VowelMask = (1 << 1) | (1 << 5) | (1 << 9) | (1 << 15) | (1 << 21);
public static bool IsVowelBitArithmetic(char c)
{
// The OR with 0x20 lowercases the letters
// The test c > 64 rules out punctuation, digits, and control characters.
// An additional test would be required to eliminate characters above ASCII 127.
return (c > 64) && ((VowelMask & (1 << ((c | 0x20) % 32))) != 0);
}
有关时间的测试,请参阅https://dotnetfiddle.net/WbPHU4。
位掩码的关键思想是第二位设置为'a',第六位设置为'e',等等。然后你取字母,左移它的ASCII值作为整数,并查看掩码中的该位是否已设置。在每个元音的掩码中设置一个位,OR操作首先执行字母的小写。
答案 8 :(得分:0)
您可以在。
中执行此类操作 private bool IsCharacterAVowel(char c)
{
string vowels = "aeiou";
return vowels.IndexOf(c.ToString(),StringComparison.InvariantCultureIgnoreCase) >= 0;
}
答案 9 :(得分:0)
为什么不创建一个元音/辅音数组并检查数值是否在数组中?
答案 10 :(得分:0)
return "aeiou".Any( c => c.Equals( Char.ToLowerInvariant( myChar ) ) );
答案 11 :(得分: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();
答案 12 :(得分:0)
查看此代码以检查Vowel和Consonant,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");
}