2017-09-14 49 views
2

我需要编写一个程序,它的变化,因为立陶宛语言的一些奇怪的语法规则的最后两个(或刚刚过去)已录入单词的字母(或多个)。修改单词的最后几个字母?

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

Kazys

输出将

你好,卡兹。

如果一个人输入Balys,代码应该将名称更改为叶甲和打印。

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

P.S.对于那些想知道的人,为什么我需要这个,我可以告诉你,这是立陶宛文法中的一个问题,如果你正在寻找某人,那么它就需要改变单词的结尾。你可能是什么之后

+0

我认为这是很简单的,你只需要知道字符串是非常相似的阵列。如何在c#中使用这个事实是我不知道的,我对c#根本不感兴趣。但是肯定的,它会像覆盖最后一个字符一样简单,或者改变字符串的长度。所以我的建议是,尽可能详细地阅读[C#中的字符串](https://docs.microsoft.com/en/。com/en-us/dotnet/csharp/programming-guide/strings /) –

+0

我想你必须硬编码所有你想要的改变。循环输入单词并查找最后两个字母。然后检查是否需要更改,并相应地执行。然后再次检查最后一个字母是否需要更改。我不会说立陶宛语,所以我不确定有多少这样的规则或者他们的工作方式 – Ank

+0

@Ank如果有规则,那么这不仅是不必要的,而且也是一件非常糟糕的事情。特别是如果你不知道或理解搜索字符串数组的成本(*低级*),并且不能想到更快的算法来完成这样的事情。 –

回答

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

我个人认为这样的语言规则是为什么正则表达式存在。它可以让你轻松制定预见,后视等规则,以确保只有符合特定结构的词才会被更改。对于示例情况下,它应该是一样简单:

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

在字符串末尾的$意味着它只会改变“伊苏”为“y”时,“YS”是在最后两个字母一个字符串。

正则表达式可以变得复杂得多,许多人不喜欢它们。但是,我发现他们大部分时间都是简洁明了的。

+0

只要规则复杂得足以使其值得,肯定是要走的路。 –

相关问题