【问题标题】:Modify the last letters of words? [closed]修改单词的最后一个字母? [关闭]
【发布时间】:2017-09-14 16:08:30
【问题描述】:

由于立陶宛语的一些奇怪的语法规则,我需要编写一个程序来更改输入单词的最后两个(或只是最后一个)字母。

例如,我的名字是 Kazys。 我想要一个可以将最后两个字母 (ys) 更改为另一个字母 (y) 的代码。 所以当一个人输入时

卡兹

输出将是

你好,卡兹。

如果有人输入 Balys,代码应将名称更改为 Baly 并打印出来。

我只是 C# 的初学者。所以,我什至不知道一些基本功能。 非常感谢任何帮助!

附:对于那些想知道为什么我需要这个的人,我可以告诉你,这是立陶宛语法中的一件事,如果你正在称呼某人,它需要改变词尾。

【问题讨论】:

  • 我觉得很简单,你只需要知道字符串和数组很相似。我不知道如何在 c# 中使用这个事实,而且我对 c# 一点也不感兴趣。但可以肯定的是,它会像覆盖最后一个字符或更改字符串的长度一样简单。所以我的建议是,尽你所能阅读Strings in c#
  • 我认为你必须硬编码所有你想要的改变。循环输入单词并找到最后两个字母。然后检查它们是否需要更改,然后进行相应的操作。然后再次检查最后一个字母是否需要任何更改。我不会说立陶宛语,所以我不确定有多少这样的规则,也不知道它们是如何运作的
  • @Ank 如果有规则,那么这不仅是不必要的,而且是一件非常糟糕的事情。特别是如果您不知道或不了解搜索字符串数组(低级)的成本,并且想不出更快的算法来做这样的事情。
  • @IharobAlAsimi 我猜会有很多规则适用于不同的条件。因此,您必须以任何方式搜索字符串以查找哪些规则适用于哪些字符串并采取相应措施。
  • 我认为你的意思是你想应用一个具有潜在结束和替换的结束替​​换函数,重复直到你完成一个替换。要测试和应用替换,您需要查看字符串是否以结尾结尾,如果是,则返回名称长度减去替换附加的结尾长度的子字符串。提示:这些词几乎可以翻译成 C#。

标签: c# string input char


【解决方案1】:

我个人认为这样的语言规则就是正则表达式存在的原因。它使您可以轻松地通过前瞻、后瞻等方式制定规则,以确保仅在符合特定结构时才更改单词。对于您的示例情况,它应该很简单:

var firstName = "Kazys";
var formattedFirstName = Regex.Replace(firstName, @"ys$", "y");

字符串末尾的$表示只有当“ys”是字符串的最后两个字母时才会将“ys”改为“y”。

正则表达式会变得更加复杂,很多人不喜欢它们。但是,我发现它们大部分时间都简洁明了。

【讨论】:

  • 只要规则足够复杂以使其值得,绝对是要走的路。
【解决方案2】:

您可以编写一个扩展类来应用存储在字典中的规则,这很容易。复杂的规则可以使 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】:

    您可能追求的最小工作样本。 您似乎对代码有复杂的要求,但这是在字符串中替换字符串的基本概念。

    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);
                }
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-07
      • 1970-01-01
      • 2020-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多