我需要编写一个程序,由于立陶宛语的一些奇怪的语法规则,它会改变输入单词的最后两个(或最后一个)字母。
例如,我的名字是Kazys。 我想要一个可以将最后两个字母(ys)改为另一个字母(y)的代码。 所以当一个人输入时
Kazys
输出为
您好,Kazy。
如果某人输入Balys,代码应将名称更改为Baly并打印出来。
我只是C#的初学者。所以,我甚至不知道一些基本功能。 非常感谢任何帮助!!
P.S。对于那些想知道的人,为什么我需要这个,我可以告诉你,立陶宛语语中的一个问题是,如果你正在向某人说话,那就要改变这个词的结尾。
答案 0 :(得分:1)
我个人认为,像这样的语言规则就是存在正则表达式的原因。它允许您轻松制作具有前瞻,后视等规则,以确保只有在适合特定结构时才更改单词。对于您的示例案例,它应该像以下一样简单:
var firstName = "Kazys";
var formattedFirstName = Regex.Replace(firstName, @"ys$", "y");
字符串末尾的$意味着它只会改变" ys"到" y"什么时候" ys"是字符串中的最后两个字母。
正则表达式可能变得更加复杂,很多人不喜欢它们。但是,我发现大多数时候它们都很简洁明了。
答案 1 :(得分:0)
您可能会追求的最小工作样本。 您似乎对代码有复杂的要求,但这是替换字符串中字符串的基本概念。
using System;
using System.Drawing;
using System.Windows.Forms;
namespace ChangeLastChar_46223845
{
public partial class Form1 : Form
{
TextBox txtbx_input = new TextBox();
TextBox txtbx_result = new TextBox();
Button btn = new Button();
public Form1()
{
InitializeComponent();
AddOurStuffToTheForm();
PutDefaultWordInInputBox();
}
private void PutDefaultWordInInputBox()
{
txtbx_input.Text = "Krazys";
}
private void AddOurStuffToTheForm()
{
txtbx_input.Location = new Point(5, 5);
btn.Location = new Point(5, txtbx_input.Location.Y + txtbx_input.Height + 5);
txtbx_result.Location = new Point(5, btn.Location.Y + btn.Height + 5);
btn.Text = "Substring";
btn.Click += Btn_Click;
this.Controls.Add(txtbx_input);
this.Controls.Add(btn);
this.Controls.Add(txtbx_result);
}
private void Btn_Click(object sender, EventArgs e)
{
if (string.IsNullOrEmpty(txtbx_input.Text) || string.IsNullOrWhiteSpace(txtbx_input.Text))
{
return;
}
if (txtbx_input.Text.EndsWith("ys"))
{
txtbx_result.Text = "Hello " + txtbx_input.Text.Substring(0, txtbx_input.Text.Length - 1);
}
}
}
}
答案 2 :(得分:0)
您可以编写一个扩展类,它可以很容易地应用存储在字典中的规则。复杂的规则可以使Regex成为更好的选择,但是如果简单的字符串替换,不区分大小写的字典可能更好,以避免每次都检查每个可能的规则。
public static class LanguageExtensions
{
// Define case insentive dictionary
public static Dictionary<string, string> Rules = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase)
{
// List rules here
{ "ys", "y"},
};
public static string ApplyRules(this string input)
{
string suffix;
if (input != null && input.Length > 2 && Rules.TryGetValue(input.Substring(input.Length - 2, 2), out suffix))
return input.Remove(input.Length - 2) + suffix;
else
return input;
}
}
然后,您只需要调用扩展方法:
Console.WriteLine("Kazys".ApplyRules()); // "Kazy"
答案 3 :(得分:-1)
public static class NameEditor
{
public static string EditName(string name)
{
return name.Remove(name.Length-1);
}
}
这将删除名称的最后一个字符。我希望你能从这里概括一下你的具体规则。
使用:
string name="Kazys";
Console.WriteLine(NameEditor.EditName(name));