質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

2回答

2909閲覧

文字列の比較(1文字違い)(2文字違い)

tasokare16sora

総合スコア7

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

0クリップ

投稿2020/03/06 14:40

編集2020/03/06 14:45

ひなと申します。
よろしくお願いいたします。

2つのString型変数に文字列を格納し
2つの変数を比較した際に、
①完全に一致した場合
②1文字のみ違う場合
③2文字違う場合
それぞれで処理を分けたいのです。

①の場合はEqualsメソッドを使えばいいとわかるのですが
Stringクラスのメソッドなどを見ても②、③をどう実現すれば良いか思いつきません。

よろしければご教示の程お願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

YAmaGNZ

2020/03/06 23:30 編集

1文字違うとはどのような状態ですか? 例えばABCとABACはどうですか? 3文字目が異なり、4文字目がないので2文字違いですか? それともAが挿入されただけなので1文字違いですか? DEFとDDEFはどうですか?
tasokare16sora

2020/03/07 01:03

ABCとABACでしたら、3文字目が異なり、4文字目がないので2文字違いとしたいです。 DEFとDDEFなら 2文字目が異なり4文字目がないので2文字違いとします。 文字数の違いもカウントしたいです。
Zuishin

2020/03/07 01:23 編集

それだとこのベストアンサーの方法ではできません。コードが載っているからと言って反射的に決めるのではなく、実際に自分の手元で確かめましょう。「レーベンシュタイン距離」を調べてください。
YAmaGNZ

2020/03/07 03:35

>DEFとDDEFなら >2文字目が異なり4文字目がないので2文字違いとします。 これは2文字目以降が異なるので3文字違いなのではないのですか?
guest

回答2

0

カウントする変数を用意しておき、双方の文字列の文字を最初から順番に比較していって、違う場合にはカウント変数を+1していきます
文字列の比較が終わったときに、そのカウント変数の値が、
0の場合、
1の場合、
2の場合、
で処理を分ければいいんじゃないでしょうか。

#メソッドなど使わないで済みます

投稿2020/03/06 22:50

y_waiwai

総合スコア88042

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

文字列の比較は前提条件によって様々な方法が考えられます。
(比較したい文字列の長さが違う場合はどうするのか、部分一致と完全一致どれを用いるか)
今回は単純に同じ長さの文字列で考えてみます。

すぐに思いついたのは下記の3つです。
(もちろんこれ以外の方法もありえます)

  • for文で配列を1文字ずつ判定する
  • StringクラスのReplaceメソッドで一致した部分を削除して残った文字数を数える
  • LINQのExceptメソッドで差分を求めて残った文字数を数える

処理としてわかりやすいのはfor文を使用する方法で短く書けるのはExceptメソッドを使用する方法だと思います。
Replaceメソッドは完全一致で判定したいときに使用するといいと思います。
目的に合わせて色々な方法を試してみてください。

C#

1string str1 = "ABCDE"; 2string str2 = "AbCdE"; 3 4int count = 0; 5 6for (int i = 0; i < Math.Min(str1.Length, str2.Length); i++) 7{ 8 if (str1[i] != str2[i]) 9 { 10 count++; 11 } 12} 13 14Console.WriteLine($"For => {count}"); 15 16Console.WriteLine($"Replace => {string.Copy(str1).Replace(str2, "").Length}"); 17 18Console.WriteLine($"Except => {str1.Except(str2).Count()}");

String.Replace メソッド

Enumerable.Except メソッド

投稿2020/03/06 15:19

kawa0x0A

総合スコア271

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問