C#で一時変数を使わずに2つの文字列を入れ替える方法
C#プログラミングにおいて、通常は一時変数(テンポラリ変数)を使って2つの文字列の値を入れ替えますが、実は一時変数なしでも文字列の連結とSubstringメソッドを組み合わせることで、同じことが実現できます。
この記事では、その具体的な手順とサンプルコードをわかりやすく解説します。
基本的な考え方
一時変数を使用せずに2つの文字列を入れ替えるには、以下の手順に従います。
ステップ1:2番目の文字列を1番目の文字列に連結する
まず、str2をstr1に連結して、両方の文字列を含む1つの文字列を作成します。
str1 = str1 + str2;
ステップ2:str1の元の部分をstr2に設定する
Substringメソッドを使い、連結後の文字列から元のstr1の部分だけを取り出してstr2に代入します。
str2 = str1.Substring(0, str1.Length - str2.Length);
ステップ3:str2の部分をstr1に設定する
最後に、連結後の文字列から元のstr2の部分だけを取り出して、str1に代入します。
str1 = str1.Substring(str2.Length);
サンプルコード
実際に動作を確認できる完全なサンプルコードは以下の通りです。
using System;
class Demo {
public static void Main(String[] args) {
String str1 = "Brad";
String str2 = "Pitt";
Console.WriteLine("入れ替え前の文字列");
Console.WriteLine(str1);
Console.WriteLine(str2);
str1 = str1 + str2;
str2 = str1.Substring(0, str1.Length - str2.Length);
str1 = str1.Substring(str2.Length);
Console.WriteLine("入れ替え後の文字列");
Console.WriteLine(str1);
Console.WriteLine(str2);
}
}実行結果
入れ替え前の文字列 Brad Pitt 入れ替え後の文字列 Pitt Brad
処理の流れを詳しく見る
このコードでは、最初に「Brad」と「Pitt」を連結して「BradPitt」という文字列を作ります。次に、全体の長さからstr2の長さを引くことで、元のstr1(「Brad」)の長さが求まり、それをSubstring(0, 4)で取り出してstr2に代入します。この時点でstr2は「Brad」になります。
最後に、Substring(str2.Length)、つまりSubstring(4)によって4文字目以降の「Pitt」を取り出し、str1に代入することで、2つの文字列が完全に入れ替わります。
注意点
C#の文字列は不変(イミュータブル)であるため、この手法では新しい文字列オブジェクトが生成されます。非常に大きな文字列や頻繁な入れ替え処理を行う場合は、パフォーマンスへの影響も考慮するとよいでしょう。また、数値型の場合はXOR演算などを使った同様のテクニックもありますが、文字列の場合は上記のような連結とSubstringを組み合わせる方法が一般的です。
-
Pythonで2つの変数の値を交換する方法【一時変数あり・なしの2パターン】
はじめにプログラミングにおいて、2つの変数が持つ値を入れ替える「スワップ(交換)」処理は非常によく使われる基本操作です。この記事では、Pythonで変数を交換する2つの方法を、実際のコード例とともにわかりやすく解説します。方法1:一時変数を使う方法最も古典的で汎用的なのが、もう1つの一時変数(テンポラリ変数)を介して値を入れ替える方法です。他の多くのプログラミング言語でも同様の手法が使われます。>>> x = 10>>> y = 20>>> z = x # x の値を一時変数 z に退避>>> x = y # y
-
Pythonの正規表現(reモジュール)で2つの文字列を比較する方法
Pythonでは、標準ライブラリのreモジュールを利用することで、正規表現による文字列の比較や照合を簡単に行えます。最も一般的な方法は、re.search()関数を使って、一方の文字列(パターン)がもう一方の文字列の中に存在するかどうかを調べるアプローチです。 re.search()を使った比較の基本例 以下のコードでは、文字列s1を正規表現パターンとして扱い、それが文字列s2内にマッチするかどうかを判定しています。 import re s1 = Pink Forest s2 = Pink Forrest if bool(re.search(s1, s2)) == True: pr