• 締切済み

文字列の処理

早速ですが質問です。 2つの文字列を入力し、一字一句正しければ「正しい」 間違っている文字数3文字以内なら「大体正しい」 4文字以上間違っている場合は「正しくない」と表示させるプログラムがわかりません。 例えば「perfomance」なら    「perfomance」(誤0)で「正しい」    「perfomazzz」(誤3)で「大体正しい」    「perfomzzzz」(誤4)で「正しくない」といった感じです。 わかりずらくて申し訳ありません。 すいませんが、ご教授よろしくお願いします。

みんなの回答

  • yama1718
  • ベストアンサー率41% (670/1618)
回答No.6

No.2の補足です。 すみませんPCの調子が悪くて二重に回答が入ってしまいました。 開発言語が何か書かれていないのですが、 PHP言語では文字列関数にlevenshteinが用意されています。 レーベンシュタイン距離なら質問の例で言われている値が、そのまま求められます。

全文を見る
すると、全ての回答が全文表示されます。
  • eroermine
  • ベストアンサー率18% (83/444)
回答No.5

ひところはやったファジィ制御ですね。 "fuzzy search" 等で検索して見てください。

全文を見る
すると、全ての回答が全文表示されます。
  • yama5140
  • ベストアンサー率54% (136/250)
回答No.4

>2つの文字列を入力し、一字一句正しければ「正しい」 1.「一句」毎の区切り(全角・半角空白、その数)の違いは、判定するのですか?。 2.2つの文字列の長さは「同じ」、が前提なのですか?   ・前提の場合、      例えば一方が、「abc defg hijk 」で、他方が      「bc defg hijk a」は、「誤」はいくつになるのでしょうか?。   ・前提でない場合、    「ご教授よろしくお願いします」と、    「ご教示方よろしくお願いします」の場合、「誤」はいくつになるのでしょうか?。 >間違っている文字数3文字以内なら「大体正しい」 >4文字以上間違っている場合は「正しくない」と表示させるプログラムがわかりません。 3.入力文字列が例えば、40文字の場合と3文字の場合でも、その判定基準は同じですか?。   例えば、入力文字列が40文字の場合、4文字違えば、「正しくない」ですか?。   例えば、入力文字列が3文字の場合、全部違っていても「大体正しい」ですか?。 >わかりずらくて申し訳ありません。  以上、補足頂けると多少判り易くなるかも。

全文を見る
すると、全ての回答が全文表示されます。
  • yama1718
  • ベストアンサー率41% (670/1618)
回答No.3

レーベンシュタイン距離という、文字列の類似度の判定方法があります。 スペルチェックとか検索などで使われているアルゴリズムです。 大まかには頭から文字を判定していって、同じ,違う,抜けている,などをカウントします。 リンク先のソースを参考にして組み込むだけでも使えると思います。 http://www.merriampark.com/ldobjc.htm http://www.merriampark.com/ld.htm http://www.phonethica.net/nao-tokui/%E6%96%87%E5%AD%97%E5%88%97%E3%81%AE%E9%A1%9E%E4%BC%BC%E5%BA%A6-levenshtein%E8%B7%9D%E9%9B%A2/ http://ja.wikipedia.org/wiki/%E3%83%AC%E3%83%BC%E3%83%99%E3%83%B3%E3%82%B7%E3%83%A5%E3%82%BF%E3%82%A4%E3%83%B3%E8%B7%9D%E9%9B%A2

全文を見る
すると、全ての回答が全文表示されます。
  • yama1718
  • ベストアンサー率41% (670/1618)
回答No.2

レーベンシュタイン距離という、文字列の類似度の判定方法があります。 スペルチェックとか検索などで使われているアルゴリズムです。 大まかには頭から文字を判定していって、同じ,違う,抜けている,などをカウントしていきます。 リンク先のソースを参考にして組み込むだけでも使えると思います。 http://www.merriampark.com/ldobjc.htm http://www.merriampark.com/ld.htm http://www.phonethica.net/nao-tokui/%E6%96%87%E5%AD%97%E5%88%97%E3%81%AE%E9%A1%9E%E4%BC%BC%E5%BA%A6-levenshtein%E8%B7%9D%E9%9B%A2/ http://ja.wikipedia.org/wiki/%E3%83%AC%E3%83%BC%E3%83%99%E3%83%B3%E3%82%B7%E3%83%A5%E3%82%BF%E3%82%A4%E3%83%B3%E8%B7%9D%E9%9B%A2

全文を見る
すると、全ての回答が全文表示されます。
  • koko_u_
  • ベストアンサー率18% (459/2509)
回答No.1

あなたが今、(誤0)とか(誤3)と書いたのをプログラムに数えさせるだけです。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 文字列から整数導き出したい

    お世話になります。 現在、簡易的な占いのプログラムを作ってみています。 フォームに入力された文字から占いの結果を表示するようなものを 作りたいのですが、中々うまくいきません。 仕組み的にはフォームから文字列をPOST⇒10進数の整数に変換⇒10進数の整数に対応する占い結果を表示という形を考えています。 文字列をbin2hex関数で16進数にはできるのですが、16進数から10進数変換する方法がわかりません。 何かより方法がありましたらご教授ください。

    • ベストアンサー
    • PHP
  • 文字列に\nを入れたい

    データベースAccessからデータを取得しTextFieldにその取得したデータを表示させたのですが、文字数が長くてTextFieldに収まらなくなっしてしまいました。そこで取得した文字列に新たに\nを入れて改行させようとしています。 String str = "文字列40字以上…" if(str.length >= 40){ ***処理内容*** 文字列が40字以上なら40文字目のすぐ後ろに\nを足して改行させて表示させたい。 ただし、40文字目を区切りとして改行させ表示させる。例)96文字なら3行に表示させるようにする。 } このような処理を行いたいのですが、良い方法がわかりません。アドバイスをお願いします。

  • 文字列

    文字列をつかったプログラムの練習をしています。 friend fri end のように入力した文字列を半分ずつ表示するプログラムを作りたいんですけど 繰り返しやポインタを使わずに作ることはできますか?

  • 大文字の文字列→小文字の文字列

    C言語初心者です。 ある演習問題をやっていて詰まっています。 自分で入力した大文字の文字列を小文字にするプログラムを作るという問題なのですが、↓の条件があり、こんがらがってしまいました。 ・入力した文字列に小文字が含まれていたら、エラーと表示して再び入力を促し、0を入力するとプログラム終了という流れにする。 ・ポインタ変数を使う。 ・continue文を使う。 ・標準ライブラリ関数は使わない。 です。 ・continue文というのがよくわからない。 ・宣言した関数でどの処理をすればいいのかわからない。 ・大文字を小文字にするというプログラムがわからない。 (アスキーコードをどう使うのか) でつまっています。 どなたかアドバイス・解説・模範解答・指摘などしていただけないでしょうか。 よろしくお願い致します。

  • 文字列の分割

    エクセルであるセルに入力された文字列を分割したいのですがうまくいきません。 下記のような感じで、文字+数字の入力になっており、文字の数及び数字の数は決まっておりません。 あいうえお123456 かきく98765 さしすせ2222 これをなんとか別々のセルに下記のように分割したいです。 あいうえお 123456 かきく    987654 さしすせ  2222 ご存知の方がいらっしゃいましたらご教授下さい。 よろしくお願いします。

  • 文字列の問題

    入力された文字列(char型配列に格納)について、1文字ずつその文字の種類を表示し、最後に文字数を表示するプログラムを作成せよ。文字の種類は、大文字、小文字、数字、その他の文字の4種類とすること。 という問題なのですが、実行例は↓になっています。 % ./mojiretsu 文字列(20文字まで)? Char-1 ←文字列を入力 1文字目は C で、 大文字です。 2文字目は h で、 小文字です。 3文字目は a で、 小文字です。 4文字目は r で、 小文字です。 5文字目は - で、 その他の文字です。 6文字目は 1 で、 数字です。 以上6文字です。 % ですが↓から先をどう書いたら良いのかわかりません。どなたか教えてください。 #include<stdio.h> main() { char ch[20]; printf("文字列(20文字まで)? "); scanf("%s", ch);

  • 文字列分割(JAVA)

    こんにちわ。 JAVAにてですが、文字数不明の全角文字列があるとします。 そこで文字数が50文字以内だった場合は格納先Aに、 51文字以上だった場合には50文字以内を格納先Aへ、 それ以降の文字を格納先Bへ。 格納先Bに入る文字列が51文字以上の場合は 51文字以降を切り捨てる。 ※ここで言う文字数はすべて全角文字として考えます。 上記の内容についてですが極力ライブラリ(API)を使わずに 実装したいと思っているのですが、参考書などを見るとどれも 使っていまして実装に困っています。。 よろしければご教授して頂きたいです。 以上、よろしくお願い致します。

  • 文字列を2つに分ける

    10個近くある異なるブックのシートを、新しい1つのブックにまとめてしまおうと考えています。 手動で1つのブック内の複数シートを選択して、新しいブックにコピーしようとしましたが、1つのセルに入力されている文字列の中に、かなり長い(255字以上)ものが含まれており、コピーした際にデータが捨てられてしまいます。 長い文字列を、事前にマクロで探して、2つのセルに分ける (たとえば、A1に長い文章があるなら、A2にセルを挿入して、文字列を2つにわける) ことは可能でしょうか? 分けたあとにそれぞれが255字以下になっていることも確認したいと思っています

  • 文字列の入れ替え

    2つのchar型配列x[],y[]に格納された文字列を入れ替えるプログラムを作成せよ。ただし入替え処理には、関数swap_array(char [],char [])を作成して用いること。という問題なのですが、下記の実行例では、2つの文字列xとyをキーボードから入力し、入れ替えた後に表示している。 <実行例> % ./irekae 文字列x (20字まで)? Mojiretsu 文字列y (20字まで)? Irekae 関数swap_array()を呼び出しました 入替後の x: "Irekae" 入替後の y: "Mojiretsu" % となっているのですが文字列を格納するところまでしかわかりません。 どなたか教えていただけないでしょうか? #include<stdio.h> int main(void) { char x[21]; char y[21]; printf("文字列 (20字まで)? "); scanf("%s", x); printf("文字列 (20字まで)? "); scanf("%s", y);

  • A列の文字列によってB列への入力を変える

    こんにちは。マクロ初心者で、質問なのですが、 エクセルで、A列に入力されている文字列によって、 B列文字を自動で入力するマクロを作成したいのですが、 どのように記述すればよいでしょうか? 例: A列 |B列 |  あ | 01 |A列「あ」の場合、B列の同じ行に「01」  い | 02 |A列「い」の場合、B列の同じ行に「02」 といった感じです。 初歩的な質問で申し訳ございませんがご教授願います。

このQ&Aのポイント
  • 新しいPCに標記のソフトをインストールしたいのですが、「すでにインストール済みです。一台しかインストールできません」のようなニアンスのエラーメッセージが出ます。以前の登録を消して、新しいPCにインストールすることはできないのでしょうか?
  • 前のPCにインストールしたソフトが新しいPCでも使いたいですが、すでにインストール済みのエラーメッセージが出てしまいます。登録を消して新しいPCにインストールする方法はありますか?
  • 新しいPCにソフトをインストールしたいのですが、以前のPCでの登録が残っているため、すでにインストール済みというエラーメッセージが表示されます。登録を削除して新しいPCにインストールする方法はありますか?
回答を見る