🦔
【C#プログラミング】String型の最初のx文字のみを特定の要素に書き換える方法
はじめに
競技プログラミング中に必要が出てきたのでまとめました。
指定した文字列の最初の x 文字のみを 0 に書き換える方法は、C# の文字列操作を使うことで実現できます。以下にいくつかの方法を示します。
方法 1: Substring を使った方法
string input = "abcdefghij";
int x = 3; // 最初の3文字を "0" に書き換える
string result = new string('0', x) + input.Substring(x);
Console.WriteLine(result); // 出力: 000defghij
説明
-
new string('0', x)で'0'をx回繰り返した文字列を生成。 -
input.Substring(x)で元の文字列のx番目以降の部分を取得。 - 両方を結合して結果を得る。
方法 2: StringBuilder を使った方法
using System.Text;
string input = "abcdefghij";
int x = 4; // 最初の4文字を "0" に書き換える
var sb = new StringBuilder(input);
for (int i = 0; i < x && i < sb.Length; i++)
{
sb[i] = '0';
}
string result = sb.ToString();
Console.WriteLine(result); // 出力: 0000efghij
説明
-
StringBuilderを使って、文字列の特定の位置を効率的に変更。 - ループで最初の
x文字を'0'に書き換え。
方法 3: Linq を使った方法
using System;
using System.Linq;
string input = "abcdefghij";
int x = 2; // 最初の2文字を "0" に書き換える
string result = string.Concat(input.Select((c, index) => index < x ? '0' : c));
Console.WriteLine(result); // 出力: 00cdefghij
説明
-
Selectで各文字を処理し、index < xのとき'0'に置換。 -
string.Concatで文字列に変換。
方法 4: ToCharArray を使った方法
string input = "abcdefghij";
int x = 5; // 最初の5文字を "0" に書き換える
char[] charArray = input.ToCharArray();
for (int i = 0; i < x && i < charArray.Length; i++)
{
charArray[i] = '0';
}
string result = new string(charArray);
Console.WriteLine(result); // 出力: 00000fghij
説明
- 文字列を
charの配列に変換 してから、最初のx文字を書き換え。 -
new string(charArray)で配列を再び文字列に変換。
まとめ
-
最短・簡潔:
Substringとnew stringを使う方法(方法 1)。 -
パフォーマンス: 文字列の一部を書き換えるなら
StringBuilder(方法 2)が効率的。 - Linq を使った方法は読みやすいが、パフォーマンスは若干劣ります。
おすすめ・参考書籍
問題解決力を鍛える!アルゴリズムとデータ構造 (KS情報科学専門書)
Discussion
この方法は、C#8.0以降なら
Index/Rangeが使えますね。(インデックスと範囲を使用してデータの範囲を調べる - C# | Microsoft Learn)
この方法は
ToCharArrayのあとにSpan<char>として扱う方法があります。またここまでで上がっていない手法として
string.Create<TState>()を使った手法があります。xが文字数を超えたときの処理など考えることはありますが、ご参考まで。コメントありがとうございます。まだまだ方法があるのですね。
inputメソッドもCreateメソッドも初めて知りました。勉強になります。