【解決方法】次の順序で次のアルファベットを取得する必要があります

[ad_1]

次の文字列を取得するための関数が必要ですが、ここではロジックが異なります。 入力アルファベット A を B に、B を C に Z までインクリメントしたいのですが、ZI の後に文字列 A1 を取得する必要があります。 文字列 A1 を入力として取得すると、Z1 まで B1、B1 から C1 にインクリメントする必要があります。 Z1 の後、A2 を取得する必要があります。 A2 を取得すると、それは B2 にインクリメントされ、Z9 まで続きます。 誰か助けてくれませんか。

以下のコードを使用してみましたが、入力 A1 を与えると間違った出力が返され、A2 として出力されます。

私が試したこと:

C#
public static string Increment(string input)
{
   List<char> chars = input.ToList();
   for (int i = chars.Count - 1; i >= 0; i++)
   {
      if (chars[i] < '1' || chars[i] > '9')
      {
         throw new ArgumentException("");
      }
      chars[i]++;
      if (chars[i] > 'Z')
      {
         chars[i] = 'A';
         if (i == 0)
         {
            chars.Add('1');
         }
      }
      else
      {
         break;
      }
   }
   return string.concat(chars);
}

解決策 1

試してください (このようなコードは堅牢ではないことに注意してください。適切なチェックを追加するのはあなた次第です)

C#
public static string Increment(string input)
{
    Char letter = input[0];
    if ( letter < 'Z')
    {
        return ((char)(letter+1)).ToString() + input.Substring(1);
    }
    else
    {
        int number = int.Parse(input.Substring(1))+1;
        return "A"+ number.ToString();
    }
}

解決策 3

Linq の使用:

C#
public static string GetNextCode(string current)
{
	string tmp = current.Length == 1 ? $"{current}0" : current;
	char[] alpha = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".ToArray();
	char[] digit = "0123456789".ToArray();

	var list = (from d in digit
			from a in alpha
			select $"{a}{d}")
		.ToList();
	int i = list.IndexOf(tmp) +1;
	
	if(i>list.Count-1)
		throw new Exception("Limit of codes has been reached!");
	else
		tmp = list[i];
	
	return tmp.Substring(1,1).Equals("0") ? tmp.Substring(0,1) : tmp;

}

使用法:

C#
void Main()
{
	string currCode = "Z8"; 
	string nextCode = GetNextCode(currCode);
	Console.WriteLine($"{currCode} => {nextCode}"); //prints "A9"
}

解決策 2

あなたがしている質問は何ですか? 「誰か助けてくれませんか」以外に質問が見つかりません。

コードのロジックを再設計して、必要な出力を提供します。 出力が得られる理由がわからない場合は、コードを確認していません。 そうすることで、何が問題なのか、それを修正するために何をする必要があるのか​​がわかります。

[ad_2]

コメント

タイトルとURLをコピーしました