問題タブ [cs50]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - C でのトライの実装: セグメンテーション違反
私は現在、ハーバードから CS50 を行っています。目標は、可能な限り最速の方法で辞書を任意のデータ構造にロードすることです。この問題セットでは、Trie を使用しています。
私のコードの背後にあるロジックは次のとおりです。
- 一度に 1 文字ずつ読み取ります。
- 文字がすでに存在する場合はトライの子ノードをチェックインし、NULL に等しい場合はそれにスペースを割り当てます。
- カーソルは、領域を割り当てたばかりの子ノードに設定されます。
- 単語の終わり ("\n") に到達すると、ブール値を true に設定し、カーソルを完全に初期値 (curser->root に以前に保存した値) にリセットします。
私はいくつかの実装を試しましたが、いくつかの論理エラーがあり満足できませんでした。また、大きな辞書を持っていたときにセグメンテーション違反が発生したものもありました。
以下は私の最新の実装のコードです。基本的に、最初の単語をトライ構造にロードすることは問題ありませんが、2 番目の単語では失敗します。問題は、新しいノード値を childenode (空き領域を割り当てた場所) に設定することにあります。この背後にあるロジックは、明らかにツリーを接続して次のノードに移動することです。これは私が間違っていると思うコードです:
しかし、問題は、他のいくつかの実装では機能していましたが、これだけで突然機能しなくなり、最初の単語の後にセグメンテーション違反が発生しました。私が言ったように、私はコーディングの初心者なので、私を啓発し、私の実装を批判してください! 本当にありがとう。
編集:
もう 1 つの質問は、現在のコードで Null ターミネータ \0 を検出できないのに、改行 \n を検出できるのはなぜですか? 正しい量の単語を取得するには、ヌル ターミネータを検出できる必要があります。何が間違っているかについて何か提案はありますか?
c - C 'for' ループは 1 回だけループします
ここで「for」ループの問題についてコードを精査しました。セミコロンなどをチェックしましたが、ループが 1 回だけループしている理由がわかりません。
コードを以下に示します。ありがとうございます。
c - C: Caesar の暗号暗号化でシンボルを出力します。なぜですか? pset2 cs50
これは edx.org の cs50x コースの pset2 にある Caesar の暗号暗号化問題です。
私はすでに別のアルゴリズムでこの問題を解決しましたが、これは私の最初の試みであり、シーザーテキストの右側にこれらすべての記号が表示される理由にまだ興味があります.
すなわち。テキスト「Testing
」を入力すると、出力は「Fqefuz�����w����l��B��
」になりますが、答えは記号なしで正解です。
誰か私にそれを説明できますか?
c - 宣言されていない識別子「o」の使用
// このエラーが発生し続けます:
宣言されていない識別子「o」の使用。for (int p = 0; p <= o; p++) ^
そのすぐ上の行で「0」を宣言しましたが、なぜこのエラーが発生するのかわかりません。助けてください、私はcに非常に慣れていないので、どんな洞察も大歓迎です。ありがとう!
c - 文字列を反復するときと特定の位置を出力するときの結果が異なる (C)
私は C を学んでいます。私が直面している問題は、文字列を まで繰り返すとstrlen()
、ヌル文字 (何も表示されない) が出力されることを期待していますが、代わりに '.' を取得し続けることです。— 一方、 を出力するとarray[strlen(array)]
、何も得られません (ヌル文字)。何が起こっている?