这不是一个好奇心。昨天,我谈到了这个旧帖子,并开始在C#中玩它。这是原始的发帖表格2011(How to change vowels in a string to a symbol?)。
我更改了一些代码以及一个计数器,以计算单词中的总字母数。我被卡在if语句上。我知道该程序可能没有任何实际用途,但是我正在尝试学习C#字符串操作。
Console.WriteLine("Enter a word.");
string userWord = Console.ReadLine();
Console.WriteLine();
Console.WriteLine("You wrote {0}", userWord);
Console.WriteLine();
userWord.ToLower();
char[] wordArray = userWord.ToArray();
for (int i = 0; i < wordArray.Length; i++)
{
string theLetter = userWord.Substring(i, 1);
theLetter = theLetter.ToLower();
if (wordArray[i] == 'a' || wordArray[i] == 'e' || wordArray[i] == 'i' || wordArray[i] == 'o' || wordArray[i] == 'u')
{
wordArray[i] = '$';
}
string rebuilt = new string(wordArray);
Console.WriteLine("Your word is now: {0}", rebuilt);
Console.WriteLine("The total number of letters in your word is {0}", userWord.Length);
}
Console.ReadLine();
我只想将元音更改为$或任何其他字母或符号,然后计算单词中的数字。
答案 0 :(得分:1)
您链接到的帖子中C程序的第一个问题是,它仅将小写的元音更改为“ $”,而不更改为大写的元音。第二个问题是C#中的字符串是不可变的,您已经通过将单词更改为数组,对其进行修改并从修改后的数组中创建新字符串来解决此问题。
将所有元音转换为'$'的方法可能如下所示:
public static string VowelsToSymbol(string input)
{
if (string.IsNullOrWhiteSpace(input)) return input;
var work = new char[input.Length];
for (int i = 0; i < work.Length; i++)
{
var c = input[i];
switch (c)
{
case 'A': case 'E': case 'I': case 'O': case 'U':
case 'a': case 'e': case 'i': case 'o': case 'u':
work[i] = '$'; break;
default:
work[i] = c; break;
}
}
return new string(work);
}
效率较低,但在显示意图(正在完成)而不是机制(如何完成)方面表现更好:
private static char OneVowelToSymbol(char c)
{
switch (c)
{
case 'A': case 'E': case 'I': case 'O': case 'U':
case 'a': case 'e': case 'i': case 'o': case 'u':
return '$';
default:
return c;
}
}
public static string VowelsToSymbolLinq(string input)
{
return string.IsNullOrWhiteSpace(input) ? input :
new string(input.Select(OneVowelToSymbol).ToArray());
}
如果您想允许带重音符号的字符(或者其他可能用英语以外的其他语言来表示元音的字符)的话,事情很快就会变得很丑陋,您最好使用其他方法(在互联网上搜索“ “ .NET” isvowel'查找示例)。