2017-09-14 4 views
2

リトアニア語の奇妙な文法規則のために、入力された単語の最後の2文字(または最後の文字)を変更するプログラムをコーディングする必要があります。最後の文字を変更しますか?

たとえば、私の名前はKazysです。 最後の2文字(ys)を別の文字(y)に変更できるコードが必要です。 だから、とき

Kazys

人の入力は出力が

こんにちは、Kazyだろう。

人がBalysを入力した場合、コードは名前をBalyに変更して印刷する必要があります。

私はちょうどC#の初心者です。だから、私は基本的な機能のいくつかを知りません。 何か助けがありがとうございます!

P.S.不思議な人には、なぜ私はこれが必要なのですか?リトアニア語の文法では、あなたが誰かに対処しているならば、言葉の終わりを変えなければならないことです。

+0

、私はそれは非常に簡単だと思う:

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

次に、あなただけの拡張メソッドを呼び出す必要があります。どのようにC#でその事実を使うことができるかは私が知らないものであり、私はC#には全く関心がありません。しかし、確かに、それは最後の文字を上書きするか、文字列の長さを変えるだけの単純なものになります。ですから、私のアドバイスは、[Strings in c#](https://docs.microsoft.com)のすべてを読んでください。 –

+0

あなたが望むすべての変更をハードコードする必要があると思います。入力単語をループし、最後の2文字を探します。次に、変更が必要かどうかを確認し、それに応じて進んでください。次に、最後の文字に変更が必要かどうかを再度確認します。私はリトアニア語を話さないので、そのようなルールがいくつあるか、正確にはどのように機能するのかよく分かりません。 – Ank

+0

@Ankルールがある場合、これは不要であるだけでなく、非常に悪いことです。特に、文字列の配列を検索するコストを知っていない、または理解していない場合(*低レベル*)、このようなことを行うためのより高速のアルゴリズムは考えられない場合に特に役に立ちます。 –

答えて

0

ディクショナリに格納されているルールを簡単に適用できる拡張クラスを作成できます。複雑なルールはRegexをより良い選択肢にする可能性がありますが、単純な文字列置換の場合、大文字と小文字を区別しない辞書は毎回可能なすべてのルールをチェックすることを避ける方が良いでしょう。あなただけの文字列が配列に非常に類似していることを知っておく必要があり、

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

私は、個人的には、正規表現が存在する理由、このような言語規則があると思います。ルックアヘッド、ルックアヘッドなどの規則を簡単に作成して、特定の構造に合っている場合にのみ単語が変更されるようにすることができます。文字列の末尾に$が「YS」はで最後の2文字あるとき、それは唯一の「Y」を「YS」に変更することを意味します

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

:あなたの例の場合、限り簡単にする必要があります文字列。

正規表現ははるかに複雑になり、多くの人がそれらを気に入らない場合があります。しかし、私はそれらがほとんどの時間簡潔で明確であることがわかります。

+0

ルールが価値あるものになるようにルールが複雑になっている限り、間違いなく道のりです。 –

関連する問題