void read_dic()
{
char eng2[20], jp2[40];
FILE *fp;
int i=0;

if((fp=fopen("dic.txt", "r"))==NULL) {
printf("\n ファイルがありません\n");
exit(1);
} else {
printf("読み込み中...\n");
while (!feof(fp)) {
fscanf(fp, "%s %s", eng2, jp2);
strcpy(table[i].eng, eng2);
strcpy(table[i].jp, jp2);
i++;
if(i>=100){
printf("辞書のテーブルがいっぱいです\n");
fclose(fp);
exit(1);
}
}
fclose(fp);
printf("読み込み終了\n");
n = i;
}
}



int hash(char *tango)
{
int h=0,p=256;
while (*tango!='\0')
{
h = h*p + *tango;
h = h%BUCKET_SIZE;
tango++;
}
return(h);
}

struct cell *find(char *tango)
{
int a;
struct cell *q;
a=hash(tango);
if(bucket[a].chain==NULL)
return NULL;
else{
q=bucket[a].chain;
while ((strcmp(q->eng,tango))!=0){
if(q->next==NULL)
return NULL;
else
q=q->next;
}
return q;
}
}

以前の投稿は
http://oshiete1.goo.ne.jp/kotaeru.php3?qid=109202

このQ&Aに関連する最新のQ&A

A 回答 (5件)

まだ抜けていました。



ハッシュテーブルを検索するときに table[x]->next が NULL なのかどうなのかを
チェックしますので、テーブルを作成するときまたは初期化するときに、この next
を NULL にしておかなければうまく動かない可能性があります。
実行環境によっては明示的に初期化しなくても NULL になっている場合もあります
が、他人任せにしておくのはよくありません。

read_dic()関数内の読み込みのところで

  strcpy(table[i].eng, eng2);
  strcpy(table[i].jp, jp2);

とやっているところがあるので、この直後に次の行を追加して下さい。

  table[i].next = NULL;

ついでに補足すると、init_table()が呼び出されていませんので、read_dic() を呼び
出す前ぐらいに init_table() も呼び出してあげましょう。
    • good
    • 0

ranxさんがすでに指摘されている点は、少なくとも修正が必要です。


それに加えて、ハッシュテーブル bucket[] を作成する処理が全く抜けています
ので今のままでは「白紙の辞書」を見て検索しているに過ぎません。

ハッシュテーブル作成処理
  例えば、こんな感じの関数を作って read_dic() の後で hash_table() を
  呼び出します。
  void hash_table()
  {
    int i, h;
    struct cell **p
    
    for( i=0; i<BUCKET_SIZE; i++ )
      bucket[i].cell = NULL;
    
    for( i=0; i<n; i++ ){
      h = hash( table[i].eng );
      p = &(bucket[h].cell);
      while( *p != NULL )
        p = &(*p->next);
      *p = &(table[i]);
    }
  }

(上記のソースには全角の空白文字が使われています。全角を半角に変換して
 使って下さい)
    • good
    • 0

自己フォロー。


>またmain()で使用しているread_dic()関数とfind()関数が記載されていないの
>で、その信憑性も不明です。(「まだ続きます。。。」に続くのかな?)
この部分については次の質問に書かれていましたね。失礼しました。m(_ _)m
    • good
    • 0

まず「実行できません。

」では具体的にどういう症状なのか全くわかりません。
command not found なのですか?たぶん違いますよね。詳しく書きましょう。
またmain()で使用しているread_dic()関数とfind()関数が記載されていないので、その信憑性も不明です。(「まだ続きます。。。」に続くのかな?)
失礼ですが学生さんでしょうか?まず有効な回答が期待できそうな質問の仕方を精進して下さい。そうすることで自分の頭の中が整理できて自己解決できることも多いです。プログラミングってやつは。
それから人にソースを見てもらうならインデント付けくらいは何とかしましょう。
以上、苦言を並べてしまいましたが、あなたの成長を願ってあえて辛辣に書かせて頂きましたのでご理解ください。
    • good
    • 0
この回答へのお礼

アドバイスありがとうございました。初めて質問したので質問の仕方がわからなくてお粗末な質問内容になってしまいました。それについてのアドバイスもありがとうございました。明日早速学校でプログラムを修正してみようと思います。

お礼日時:2001/07/27 19:18

全体を見たわけではないので自信なしとしておきますが、


struct cell *find(char *tango);
と宣言されているのに、その戻り値
p= find(tango)

table[p].jp
と配列の引数にしているのは変ですね。
p->jp
のおつもりなのでは。
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QIE7の右クリックメニューにgoo辞書などを加えたい

IE7でネットブラウジングしていると、英語やパソコン用語、2ちゃんねる用語等の意味を調べたくなることが良くあります。
毎回goo辞書などのページに移動して調べるのは面倒なので、IE7の右クリックメニューに加えられたらと思うのですが、それは可能でしょうか?
IEでは無理であれば、他のブラウザでのやり方を教えて下さい。
また、英語やパソコン用語、2ちゃんねる用語を調べるには、goo辞書の他に何を登録すればよいでしょうか?
右クリックメニュー加える以外にも簡単に調べられるようにする方法があれば教えてください。

Aベストアンサー

IE7は使用していません。

参考ですが、
goo辞書を愛用されているのでしたら、Firefox2.0には、goo辞書の英和、和英、国語新語の3つのカテゴリの検索が可能なエンジンを本体の検索バーに追加できる拡張機能「goo辞書」があります。
http://help.goo.ne.jp/info/detail/1085/

検索方法は、上記リンクにも書いてありますが、用語を選択して右クリックの各辞書のメニューの選択でOKです。
Tab Mix Plusというタブ機能を充実させる拡張機能を導入すると、その結果を新しいタブに表示するようにできます。

また、一般的なGoogle、Yahoo、gooなどの検索エンジンも同様にデフォルトでFirefox本体に組み込まれており、開いたページで検索したい用語を選択し、その部分をドラッグして検索バーにドロップしても検索結果が新しいタブに瞬時に表示されますから、とても便利になると思いますが、よろしかったらどうぞ試してみてください。

Q{x = x>y ? x:y; return x;}

#include <iostream>
using namespace std;

inline int max(int x, int y){x = x>y ? x:y; return x;}

int main()
{
int num1, num2, ans;

cout << "2つの整数を入力して。\n";
cin >> num1 >> num2;

ans = max(num1, num2);

cout << "最大値は" << ans << "です。\n";

return 0;
}
の{x = x>y ? x:y; return x;}の部分の意味が解りません。

Aベストアンサー

inline int max(int x, int y){x = x>y ? x:y; return x;}
これを普通に関数で書くと

int max(int x, int y)
{
x = x>y ? x:y;
return x;
}

です。

x = 部分は右辺の結果が代入されます。これはわかりますよね。
x>y?x:y;
と書くと?より左にある条件式を判定し、その結果が真である場合は:で区切られた左側の値を、偽である場合は右の値を帰します。
x>yが真であればxを、偽であればyを返します。
それが、左辺値xに代入され、関数の戻り値として帰ります。

従って、2つの値をこの関数に入れると、大きいほうの値が帰ることになります。

Qgoo 辞書がしようできない

goo 辞書がしようできないのは私だけでしょうか?
辞書のトップは開くのですが検索ができません。
普段firefoxから使用しているのですがIE6でも検索できないみたいです。

パソコンはあまり詳しくないのでご指摘頂ければ補足します。
よろしくおねがいします。

Aベストアンサー

こんばんは。

私も駄目でした。
サーバーエラーですね。

どうしても調べたいなら、ヤフーの辞書で(ヤフーはOKでした)。
http://www.yahoo.co.jp/

Qint i,j; \n i=0,j=5;

int i,j;
i=0;
j=5:
と書いてあるソースは普通ですが、
int i,j;
i=0,j=5:
と書いてあるソースもあります。
後者はC++の正しい書式ですか?

カンマ演算子というのは後者のカンマのことですか?

Aベストアンサー

 正しい書式です。

i=0,j=5;
 における、「,」をカンマ演算子といいます。2項の演算子です。カンマで区切られた演算を「左から順番に」実行し、最後の演算を結果として返します。
 したがって、例の文であれば、i=0を実行し、次にj=5を実行。そして、j=5の結果の5を結果として返します。
 ・・・
 が、本来的には、あまり、例のような使い方はしませんね。よく見られるのは、次のような場合です。

 for (i=0,j=0 ; i < 50 ; ++i,++j) {

 のような形でよく見られます。for文の各式は、一つの式でなければならないので、こんな書き方をするわけです。初期化と更新部が一つにまとまり、ループが読みやすくなるのが利点かな。

QSleipnir2.8.4&IE8でカスタム検索ボタンのgooの辞書が文字化けします

ご閲覧ありがとうございます。

当方ではブラウザのSleipnirを使っているのですが先日SleipnirをVer2.8.4、IEを8にバージョンアップしたところ、
「Sleipnirオプション」の「検索」の「カスタム検索ボタン」で検索バーに登録してあるgoo辞書の検索結果が文字化けするようになりました。
例えば「国語辞典」と打ってgooの国語辞書のアイコンをクリックすると検索結果画面では「���ꎫ�T」となってしまいます。

両方とも同タイミングで導入したのでどちらが原因かは分かりませんが、対処法はないでしょうか?

OSはWindowsXP Pro SP3です。

Aベストアンサー

記入ミスを訂正。

goo(国語辞典)のエンコードのところを「UTF8」に変更すれば直ると思いますが。

Qtry{}catch(){}とデストラクタの関係を教えてください。

try-catchでメモリ確保を含むクラスをスローした場合、デストラクタはどの時点で働くのか、教えてください。たとえば、↓の使いかたは大丈夫でしょうか?

【1】
try{
 throw(CError(100, "エラー情報"));
}catch(CError& err){
 //ここでerrを参照しても問題ないのでしょうか?
}

【2】
try{
 CError err(100, "エラー情報");
 throw(err); // (1)
}catch(CError& err){
 //ここでerrを参照しても問題ないのでしょうか?
 //まだデストラクタはちゃんと動作するのでしょうか?
 //catchが呼び出し元のメンバであったりしても大丈夫なのでしょうか?
}

宜しくお願いします。

Aベストアンサー

【1】【2】どちらの場合も問題がありません。
コンパイラが必要に応じてerrオブジェクトのコピーを作成します。
デストラクタが呼び出されるタイミングはコンパイラに依存するところもあると思いますが、
例えばVC7.1では【2】は以下のように動作します。
(1) errオブジェクトのコンストラクタが呼び出される
(2) CErrorクラスのテンポラリオブジェクト(以下a)のコピーコンストラクタが呼び出される。
(3) errオブジェクトのデストラクタが呼び出される
(4) catch文まで到達
(5) aオブジェクトのデストラクタが呼び出される。

VC7.1では、【1】は以下のように動作します。
(1) errオブジェクトのコンストラクタが呼び出される
(2) catch文まで到達
(3) errオブジェクトのデストラクタが呼び出される。

コンパイラがオブジェクトのコピーを省略しているようです。

Q「goo辞書」の『▽』のマークは?

「goo辞書」の『▽』のマークはどういう意味があるのですか?

また、そういう『▽』や『×』等のマークの意味がまとめて載っているページはありますか?

Aベストアンサー

「goo辞書」の「凡例」は下記ですが、細かく分かれていてわかりにくいと思います。
http://dictionary.goo.ne.jp/help/jn/

 同じ『デジタル大辞泉』を採用している
Yahoo辞書http://dic.yahoo.co.jp/dsearch?p=%E8%BE%9E%E6%9B%B8&stype=0&dtype=0
の凡例のほうがまとまっていてわかりやすいと思います。▽は「常用漢字表にない音訓」です。
http://www.japanknowledge.com/contents/hanrei/djs/djs13.html
================引用開始
【記号・約物一覧】

《漢字記号》 
×常用漢字表にない漢字
▽常用漢字表にない音訓
=熟字訓
‐常用漢字表「付表」の熟字訓
( )送り仮名の省略を許容
《品詞》 
[名]名詞
[代]代名詞
[動五]動詞五段活用
[動五(四)]動詞口語五段活用、文語四段活用
[動四]動詞四段活用
[動上一]動詞上一段活用
[動上二]動詞上二段活用
[動下一]動詞下一段活用
[動下二]動詞下二段活用
[動カ変]動詞カ行変格活用
[動サ変]動詞サ行変格活用
[動ナ変]動詞ナ行変格活用
[動ラ変]動詞ラ行変格活用
[動特活]動詞特殊活用
[形]形容詞
[形ク]形容詞ク活用
[形シク]形容詞シク活用
[形動]形容動詞
[形動タリ]形容動詞タリ活用
[形動ナリ]形容動詞ナリ活用
[ト・タル]「-と」の形で副詞、「-たる」の形で連体詞
[連体]連体詞
[副]副詞
[接]接続詞
[感]感動詞
[助動]助動詞
[格助]格助詞
[接助]接続助詞
[副助]副助詞
[係助]係助詞
[終助]終助詞
[間助]間投助詞
[並助]並立助詞
[準体助]準体助詞
[ ](スル)サ行変格活用の動詞となる
〔接頭〕接頭語
〔接尾〕接尾語
〔語素〕語素
〔連語〕連語
〔枕〕枕詞
文語形
《語義解説》 
その項目を見よ
→参照せよ
対義語・対語
[補説]語誌・表記などの補説
[アクセント]アクセント表示
《季 》季語
[歌枕]歌枕
[可能]可能動詞
[派生]派生語
[類語]類語
[下接句]その語が下に付いてできる句
[下接語]その語が下に付いてできる語
[用法]用法の使い分け
《漢字項目》 
[音]字音
[訓]字訓
(慣)慣用音
(呉)呉音
(漢)漢音
(唐)唐音
[名のり]人名に用いる訓
[難読]難読語
================引用終了

「goo辞書」の「凡例」は下記ですが、細かく分かれていてわかりにくいと思います。
http://dictionary.goo.ne.jp/help/jn/

 同じ『デジタル大辞泉』を採用している
Yahoo辞書http://dic.yahoo.co.jp/dsearch?p=%E8%BE%9E%E6%9B%B8&stype=0&dtype=0
の凡例のほうがまとまっていてわかりやすいと思います。▽は「常用漢字表にない音訓」です。
http://www.japanknowledge.com/contents/hanrei/djs/djs13.html
================引用開始
【記号・約物一覧】

《漢字記号》 
×常用漢字表にない漢字
...続きを読む

Qfor(s=p; *p; p++)の*p(ポインタ)の意味

for(s=p; *p; p++)の*p(ポインタ)の意味
C言語初心者です。
今ポインタを勉強しているのですが、
for文で上記のようなものが出てきて、意味が分からず困っています。
*pで*p != NULL と同じような意味になるみたいなのですが…。
どうしてそのような意味になるのでしょうか?

ちなみにsとpはポインタで、
sには配列(入力した文字列)の先頭アドレスが入っています。
pは文字列を指していて○○○○○NULL ←になるから上記のような条件で
回るんだろうなぁとはなんとなく考えているのですが。

Aベストアンサー

念のため:
ヌルポインタは「ビットパターンとして」0 じゃないかもしれませんが, ソースプログラムにおいて「ポインタが要求される場面」で「0」とあれば, それは「ヌルポインタ」です.
もうちょっと厳密に書くと「整定数 0」はヌルポインタに変換される.

Qgoo 辞書の英語発音が、聞けなくなりました

すんません。どのカテで質問したらよいかわかりませんでした。

音声プレーヤーに、Windows Media プレイヤーを使ってたのですが、
音楽試聴したくて、Real Audio プレイヤーをダウンロードしましたら、
レンタルサイトのdmmの試聴ができなくなってしまったので、
Real Audio プレイヤーをアンインストールしました。

すると、goo辞書の英語発音が聞けなくなりました。

音声プレーヤーが、なんかたくさんあって、ややこしいです。
これらは競合して不具合がでるのでしょうか?
どうすれば、goo辞書の発音が聞けるようになるのでしょうか?

音楽プレーヤーは、携帯プレーヤーのアイリバーも使って、インストールしてます。ネットは、エクスプロラ ヴァージョン6です。

詳しい方、よろしくお願いします。

Aベストアンサー

 補足いたします。Windows Media Playerを起動させたら、ツール→「オプション」を開きます。タブ、<ファイルの種類>を開き、同画面下からボタン<すべて選択>をクリックして[ 適用 ] → [ OK ] と来たら作業は終了です。


  とりあえず、この設定を試してみて。

Qreturn 0; return 1; まで同じ

#include <stdio.h>
int main()
{
printf("%d %c\n", 65, 65);
return 0;
}
 コンパイル後は
65 A
 return 1;も同じでした。
しかし
 return 2;すると
 Exited: ExitFailure 2  終了しました:出口の失敗2 となります。
 2以上でしたら、出口が塞がるのでろうぐらいしかわかりません!?
 
 どんなバクなのでしょうか!?
 よろしくお願いします。

Aベストアンサー

C 言語の仕事は「0 なり 1 なり 2 なりを返す」までであり, その値にどう対処するかは (「C のプログラム」としては処理を完全に終了しているので) C のあずかり知らぬところです.

なので, 「どんなバクなのでしょうか!?」というのはあなたの使っている OS なりシェルなりなんなりに聞いてください.


人気Q&Aランキング