C#で特定の文字列のすべての部分文字列を一覧表示する方法【Substring活用】
C#で文字列に含まれるすべての部分文字列(サブストリング)を一覧表示するには、Substringメソッドとループ処理を組み合わせます。切り出す文字数を1から順に増やしながら開始位置をずらしていくことで、抜けや重複のない全パターンを効率よく取得できます。
基本の考え方
まず、対象となる文字列を用意します。ここでは例として次の文字列を使用します。
string myStr = "pqrz";
続いて、二重ループ(ネスト構造)を使います。外側のループで「切り出す文字数」を、内側のループで「開始位置」をそれぞれ制御し、部分文字列を新しい文字列として取得していきます。
for (int i = 1; i <= myStr.Length; i++) {
for (int start = 0; start <= myStr.Length - i; start++) {
// 部分文字列を取得
}
}
サンプルコード(完全版)
以下が、文字列「pqrz」に含まれるすべての部分文字列をコンソールに出力する完全なコードです。
using System;
public class Demo {
public static void Main() {
string myStr = "pqrz";
for (int i = 1; i <= myStr.Length; i++) {
for (int start = 0; start <= myStr.Length - i; start++) {
string substr = myStr.Substring(start, i);
Console.WriteLine(substr);
}
}
}
}
実行結果
p q r z pq qr rz pqr qrz pqrz
コードのポイント
- Substring(start, length):第1引数に開始位置、第2引数に切り出す文字数を指定します。
- 外側のループ(i):部分文字列の長さを1文字から元の文字列と同じ長さまで順番に変化させます。
- 内側のループ(start):各文字数ごとに、取り得るすべての開始位置を走査します。条件式
start <= myStr.Length - iによって、文字列の範囲を超えないよう制御しています。
なお、この手法では長さnの文字列から n(n+1)/2 個の部分文字列が得られます。今回の例(4文字)では 4×5÷2=10 個の出力となり、実行結果とも一致します。文字列解析やパターンマッチングの基礎となるテクニックなので、ぜひ覚えておきましょう。
-
C#で文字列内のすべての部分文字列を検索するプログラム
C#では、Substring()メソッドを使うことで、文字列内のすべての部分文字列(サブストリング)を簡単に取り出すことができます。基本的な考え方たとえば、次のような文字列を考えてみましょう。Xyzこの文字列からすべての部分文字列を取得するには、部分文字列の長さを1から順に変えながら、開始位置を先頭から末尾までループ処理します。各位置に対してSubstring()メソッドを呼び出し、該当する部分文字列を抽出します。for (int start = 0; start <= str.Length - i; start++) { string substr = str.Substrin
-
Pythonで文字列のすべての順列を取得する方法【itertoolsと再帰で解説】
itertools.permutationsを使った方法 Pythonで文字列のすべての順列(並べ替え)を求める最も簡単な方法は、標準ライブラリのitertoolsモジュールにあるpermutations()関数を使用することです。この関数は、イテラブルなオブジェクトから要素を取り出し、指定した長さrの順列をタプルとして順番に返します。 結果を文字列として取得するには、関数の戻り値をループで処理し、各タプルの要素をjoin()で連結します。以下に具体例を示します。 from itertools import permutations result = [.join(p) for p in p