• ベストアンサー

文字列

asuncionの回答

  • asuncion
  • ベストアンサー率33% (2126/6288)
回答No.6

> 「O, Draconian devil」のようにスペースを入れると、cDevilにO,が、cVinciにDraconianが入ってしまい、セグメンテーションエラーを起こしてしまいました。 > 私のこのやり方はまずかったでしょうか・・・? scnaf()を使うと、スペースを受け取った時点で、例えばcDevilへの 入力を終了したものとみなします。 別の関数、例えばfgets()あたりを使ってみてはいかがでしょうか。 > 例えば単純に、erosとroseを入力してもアナグラムではないと表示されます。 どういったコードでですか? > と、Count26が2つあるからでしょうか。 何をしたときに矛盾と出たのでしょうか? 行なったこととエラーメッセージを正確に教えてください。 なお、どの関数を何回呼び出しても全く問題ありません。

lockwell
質問者

補足

メンテ終わりましたね^^ 初めの質問の所で誤りがありました。 アナグラムかどうか判断するプログラムは、テキストファイルから読み込むのではなく、キーボードから打ち込みます。 それと、比較はcase-insensitiveなので大文字小文字は区別しません。すみませんでした。 1つ目のプログラムは出来ました。皆様ありがとうございました! >asuncion様 キーボードからの入力でscanfを使用したのですが、ご指摘されたようにスペースを使うと正しく入力されないですね。 fgetsはファイルを読み込むための関数でしたよね。これは私の誤りでした。申し訳ありません。 スペースを使っても正しく入力できる関数はありますでしょうか。 eros、roseを試したコードはyama5140様のコードで試させて頂きました。 以下、yama5140様のコードです。 char cDevil[32], cVinci[32];  int iCnt[26] = { 0 }, iCode, i;  for( i = 0; i < 32; i++ ){ // cDevil   if( 0x00 == cDevil[i] ) break; // 文字列終わり   if( 0 == isalpha( cDevil[i] ) ) continue; // 「英文字」判定   iCode = toupper( cDevil[i] ) - 0x41; // 大文字化(◆)   iCnt[ iCode ]++; // 加算  }  for( i = 0; i < 32; i++ ){ // cVinci   if( 0x00 == cVinci[i] ) break;   if( 0 == isalpha( cVinci[i] ) ) continue;   iCode = toupper( cVinci[i] ) - 0x41;   iCnt[ iCode ]--; // 減算  }  for( i = 0; i < 26; i++ ){ // アナグラム判定     if( 0 == iCnt[i] ) continue;   printf( "アナグラムではありません\n" );   break; } asuncion様が以前ご指摘されたように、まずO, Draconian devil!を昇順に並べ替え、次にLeonardo da Vinci!を同じく昇順に並べ替えようとしたのですが、 この方法を調べても、2つ以上の文字列を昇順にする方法(私の1つ目の質問のような)は沢山見つかるのですが、1つの文字列を昇順にする方法が見つかりません。 良い方法はありますでしょうか。

関連する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 <検索文字列> あああ ※行内に「あああ」をみつけたらその行を丸ごと削除したい・・・