• ベストアンサー

文字列

yama5140の回答

  • yama5140
  • ベストアンサー率54% (136/250)
回答No.9

No4, 5 です。 >1つ目のプログラムは出来ました。皆様ありがとうございました! よかったですね、「ソート」は一度習得すれば、あとは応用ですから。 ------------------------------------------------- >No.3 様が以前ご指摘されたように、まずO, Draconian devil!を >昇順に並べ替え、次にLeonardo da Vinci!を同じく昇順に並べ替 >えようとしたのですが・・(投稿者一部修正) ★No4 で記しましたように、この方法では難しいと思います。 >それと、比較はcase-insensitiveなので大文字小文字は区別しません。 ★このことの処理を、「昇順に並べ替え」る前にしないといけませんね。 ------------------------------------------------- >1つの文字列を昇順にする方法が見つかりません。 ★以降に示します(「丸投げ」返球ですが、この方法では本来の目的が叶えられないことを示すため、ソース全文を投稿します)。 #include <stdio.h> #include <string.h> void Sort32( char cWork[] ) {  int i, j, iLen;  char cDummy;  iLen = strlen( cWork );  for( i = 0; i < iLen; i++ ){   for( j = i; j < iLen; j++ ){    if( cWork[i] < cWork[j] ) continue;    cDummy = cWork[i];    cWork[i] = cWork[j];    cWork[j] = cDummy;   }  } } void main() {  char cDevil[32] = "O, Draconian devil!";  char cVinci[32] = "Leonardo da Vinci!";  Sort32( cDevil );  Sort32( cVinci );  printf( "%s\n", cDevil );  printf( "%s\n", cVinci ); } 注:インデントに全角空白を用いています(タブに一括変換して下さい)。 ☆実行すると、 「__!,DOaacdeiilnnorv」 「__!LVaacddeiinnoor」 となります。 (投稿表示のため、半角スペースの代わりに _ を使用) No.3 さんの >並べ替えた文字列を、先頭から1文字ずつ比べていきます。 ★↑難しいどころか、できないですよね。 ★「並べ替え」方式でなく、「26文字種の使用数をカウント」方式を  お勧めします( case-insensitive 対応)。  これですと、例のように文字列長が異なる場合にも使えます。

lockwell
質問者

お礼

文字列をそれぞれ大文字に変換してソートし比較するようなプログラムを作りました。 しかしどちらか一方の文字列に!や,が含まれているとやはり比較してもアナグラムと判断できませんね・・・。 大文字変換の際、配列が!や,に当たると、その配列自体を削除してしまえば、と考えたのですが、その方法がわかりませんでした・・・。 yama5140様がご指摘したように、使用数をカウントする方法で考えたいと思います。本当にありがとうございました!

関連するQ&A

  • c言語のポインタ配列

    下記のようなポインタ配列が合った場合、 char *mnthp[4] = { "January", "February", "March", "April" }; Februaryに別の文字列を代入したいのですが、どうすればよいのでしょうか?

  • 文字列操作

    テキストを読みこんで、そのテキストにある単語を抽出するプログラムを作ろうとしています。単語の区切り文字はスペースかタブで、1文字ずつ読みこんで行こうともいます。 しかし、1文字ずつ読みこむ関数fgetcは返値がint型のようです。1文字ずつよみこみながら読みこんだ文字がスペースかタブで無いか見たいのですが、fgetcのint型返り値をchar文字列と比較するにはどうしたら良いでしょうか。

  • ファイルからある文字列の個数を数えたい

    perl5でunixの"wc"や"grep -c"みたいに1つのファイルの中からある文字列の個数を カウントするスクリプトを作ろうとしています。 ファイルは256文字×10万行くらいのテキストで、 検索する文字列は15文字前後×40個(例えば「apple-000001」「lemon_orange」など)です。 どのようなスクリプトを組んだら効率よく各文字列をカウントできるのでしょうか? それよりwcやgrep -cを40回行った方が早いのでしょうか?

    • ベストアンサー
    • Perl
  • テキストから文字列の抽出法

    テキストから文字列を抽出して、比較したいのですが、良いアプリケーションをご存じないでしょうか? 具体的には2つの異なるフォーマットのファイルがあり、それぞれに(同一の文字列かどうか)比較したい文字列は1行ずつソートされた形で含まれています。しかしその同じ行に時刻などの付加情報が含まれているため、行単位で比較することができないのです(行単位で比較できるアプリは知っています)。 文字列とはファイル名ですので、*.* の形で指定して、抽出できればと思うのですが... もしご存知の方がいらっしゃいましたら、教えてください。

  • C言語でアナグラムを求めるプログラム

    C言語初心者で、勉強中です。 今アナグラムを求めるプログラムをC言語で作成しています。 内容はあらかじめある英単語が書いてあるテキストファイルから互いにアナグラムとなっている英単語をすべて求めてそれを出力するというプログラムです。 どこから手をつけていいかわからず悩んでいます。 そこでヒントをいただこうと思って質問しました。 どなたか回答よろしくお願いします。

  • ACCESS 文字列の比較(完全一致)

    いつもお世話になってます。 A = "a" B = "A" IF A = B Then で文字列AとBを比較するとTrueになってしまいますね。でもここではFalseに判定して欲しいのです。 Option Compare Database を Option Compare Binary にすればFalseになるのはわかるのですが、他の箇所の比較に影響が出るのが怖いので、それはしたくありません。 文字列を完全一致で比較する方法があると思うのですが、調べてもわかりませんでした。 知っている方、どなたか教えてください。 ACCESS2000です。 よろしくお願いします。

  • 文字列を配列に…。

    VBはまだ始めたばかりで本当に初歩的なことかもしれませんが分かる方がおられたら是非教えて下さい。 text1.textから取り込んだ文字列を”一文字ずつ”(Dim a(100) as stringで宣言した)配列に格納したいのですがどうしたらいいのでしょうか?? <例>text1.textに"abc"と入力しcommandbuttonを押すとa(0)に"a"がa(1)に"b"がa(2)に"c"が格納されるといったかんじです。 ちなみに今私がしたいのはtext1.textに、ある文字列を入れその文字列を文字コードに変換しそれを一文字分ずつ+1してまたそのコードを文字に直しtext2.textに出力するというものです(ようは簡単な暗号化ですね)。 私はAscとChrコマンドを利用して1文字ずつコードをずらしていこうと思っているのですが、他に良い方法などあるのでしょうか?? 本当に初心者でどのようにしらたよいのか分かりません…。 どなたか分かりやすく教えていただけませんでしょうか?? お願いします。

  • エクセルファイルから指定列の文字を

    エクセルファイルから指定列の文字を、別のテキストファイルの特定の場所へ順番に差し替えたいです。 【例】 A列の文字→元からあるテキストファイルの内容そのままに、●という特定文字へ、住所1、住所2、住所3・・・ というようにエクセルの列に従って、順番に差し替えてくれる方法ってあるでしょうか? コピペだと大変です(涙) よろしくお願いします。

  • evernoteでpdfファイル内の文字列検索につ

    evernoteに取り込んだpdf内の文字列検索についてです。 テキストなどを取り込んだものの場合はそのノートの中の単語がハイライトで表示されますが pdfファイルだと、そのようには表示されません。 その単語が含まれるpdfファイルが検出されるだけなのでしょうか?

  • PowerShellでの文字列置換ができない

    PowerShellで「\」を含む文字列が変換できません。たぶん正規表現とかで問題があると思うのですが・・・ あとテキストファイル内の文字列置換で指定された文字列がある行があった場合、その行を削除するといったことは出来るのでしょうか? 詳しい方いらっしゃいましたらよろしくお願いいたします。 <テキスト> BBBB AAAA NNNN AAAAあああA NNNN AAAA <検索文字列> あああ ※行内に「あああ」をみつけたらその行を丸ごと削除したい・・・