将语法应用于字符串
Applying grammar to strings
我正在尝试自动确定插入名称的起源,这样我就不必为每个字符串(在本例中为名称)手动插入正确的起源
例如,James 的基因是 ',Kennedy 的基因是 's。
我想我想说的是我想要一个更清晰的实现,它允许我跳过必须为每个名称编写字符串 Genetive:friend1(2..n)
using System;
namespace Prac
{
class Program
{
static void Main(string[] args)
{
string Friend = ""; string last_char_Friend = ""; string Genetive_Friend = "";
string Friend1 = "Kennedy"; string last_char_Friend1 = Friend1[^1..]; string Genetive_Friend1 = "\'s";
string Friend2 = "James"; string last_char_Friend2 = Friend2[^1..]; string Genetive_Friend2 = "\'";
string Friend3 = "Ngolo Kante"; string last_char_Friend3 = Friend3[^1..]; string Genetive_Friend3 = "\'s";
Console.WriteLine($"My friends are named {Friend1}, {Friend2} and {Friend3}");
Console.WriteLine($"{Friend1}{Genetive_Friend1} name has {Friend1.Length} letters");
Console.WriteLine($"{Friend2}{Genetive_Friend2} name has {Friend2.Length} letters");
Console.WriteLine($"{Friend3}{Genetive_Friend3} name has {Friend3.Length} letters");
for (int i = 1; i < 4; i++)
{
Console.WriteLine($"{Friend + i}{Genetive_Friend + i} name has {(Friend + i).Length} letters");
}
Console.ReadLine();
}
}
}
我必须有一种更聪明的方法来确保对每个名称应用正确的语法,我觉得我可以利用阅读 Friend 字符串的最后一个字符,但我如何在 Console.WriteLine 在'和'之间选择?
我希望 for 循环打印与三个单独的 Console.WriteLine 行相同的内容。
这也是我第一次在 Whosebug 上提问,请告诉我我是否违反了一些关于如何格式化问题的不成文规则。
这里有几个问题,首先要遍历所有参数,你应该创建一个数组(或列表或任何扩展 IEnumerable 的东西)
然后你可以迭代它。
现在按照你的例子,如果不是特别精通语法,你也可以编写一个方法来检查输入字符串的最后一个字符是什么,并将其转换为属格
static void Main( string[] args )
{
string[] friends = new string[] { "Kennedy", "James", "Ngolo Kante" };
Console.WriteLine($"My friends are named {JoinEndingWithAnd(friends)}");
for ( int i = 1; i < friends.Length; i++ )
{
Console.WriteLine( $"{MakeGenitive(friends[i])} name has {friends[i].Length} letters" );
}
Console.ReadLine();
}
static string JoinEndingWithAnd(string[] friends)
{
string result = friends[0];
for ( int i = 1; i < friends.Length; i++ )
{
if ( i != friends.Length - 1)
{
result += $" , {friends[i]}";
}
else
{
result += $" and {friends[i]}";
}
}
return result;
}
static string MakeGenitive(string friend)
{
char lastLetter = friend[^1];
if( lastLetter == 's' )
{
return friend + "'";
}
return friend + "'s";
}
我正在尝试自动确定插入名称的起源,这样我就不必为每个字符串(在本例中为名称)手动插入正确的起源
例如,James 的基因是 ',Kennedy 的基因是 's。
我想我想说的是我想要一个更清晰的实现,它允许我跳过必须为每个名称编写字符串 Genetive:friend1(2..n)
using System;
namespace Prac
{
class Program
{
static void Main(string[] args)
{
string Friend = ""; string last_char_Friend = ""; string Genetive_Friend = "";
string Friend1 = "Kennedy"; string last_char_Friend1 = Friend1[^1..]; string Genetive_Friend1 = "\'s";
string Friend2 = "James"; string last_char_Friend2 = Friend2[^1..]; string Genetive_Friend2 = "\'";
string Friend3 = "Ngolo Kante"; string last_char_Friend3 = Friend3[^1..]; string Genetive_Friend3 = "\'s";
Console.WriteLine($"My friends are named {Friend1}, {Friend2} and {Friend3}");
Console.WriteLine($"{Friend1}{Genetive_Friend1} name has {Friend1.Length} letters");
Console.WriteLine($"{Friend2}{Genetive_Friend2} name has {Friend2.Length} letters");
Console.WriteLine($"{Friend3}{Genetive_Friend3} name has {Friend3.Length} letters");
for (int i = 1; i < 4; i++)
{
Console.WriteLine($"{Friend + i}{Genetive_Friend + i} name has {(Friend + i).Length} letters");
}
Console.ReadLine();
}
}
}
我必须有一种更聪明的方法来确保对每个名称应用正确的语法,我觉得我可以利用阅读 Friend 字符串的最后一个字符,但我如何在 Console.WriteLine 在'和'之间选择?
我希望 for 循环打印与三个单独的 Console.WriteLine 行相同的内容。
这也是我第一次在 Whosebug 上提问,请告诉我我是否违反了一些关于如何格式化问题的不成文规则。
这里有几个问题,首先要遍历所有参数,你应该创建一个数组(或列表或任何扩展 IEnumerable 的东西) 然后你可以迭代它。
现在按照你的例子,如果不是特别精通语法,你也可以编写一个方法来检查输入字符串的最后一个字符是什么,并将其转换为属格
static void Main( string[] args )
{
string[] friends = new string[] { "Kennedy", "James", "Ngolo Kante" };
Console.WriteLine($"My friends are named {JoinEndingWithAnd(friends)}");
for ( int i = 1; i < friends.Length; i++ )
{
Console.WriteLine( $"{MakeGenitive(friends[i])} name has {friends[i].Length} letters" );
}
Console.ReadLine();
}
static string JoinEndingWithAnd(string[] friends)
{
string result = friends[0];
for ( int i = 1; i < friends.Length; i++ )
{
if ( i != friends.Length - 1)
{
result += $" , {friends[i]}";
}
else
{
result += $" and {friends[i]}";
}
}
return result;
}
static string MakeGenitive(string friend)
{
char lastLetter = friend[^1];
if( lastLetter == 's' )
{
return friend + "'";
}
return friend + "'s";
}