🦔
【C#プログラミング】String型の最初のx文字のみを特定の要素に書き換える方法
はじめに
競技プログラミング中に必要が出てきたのでまとめました。
指定した文字列の最初の x
文字のみを 0
に書き換える方法は、C# の文字列操作を使うことで実現できます。以下にいくつかの方法を示します。
Substring
を使った方法
方法 1: 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
番目以降の部分を取得。 - 両方を結合して結果を得る。
StringBuilder
を使った方法
方法 2: 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'
に書き換え。
Linq
を使った方法
方法 3: 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
で文字列に変換。
ToCharArray
を使った方法
方法 4: 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
メソッドも初めて知りました。勉強になります。