問題タブ [strsep]

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.

0 投票する
4 に答える
1266 参照

c - fscanf を使用して可変数の整数を読み込む

以下の形式の csv ファイルが 100,000 個以上あります。

必要なのはフィールド 10 とフィールド 17 以降です。フィールド 10 は、フィールド 17 から始まる格納された整数の数を示すカウンターです。つまり、必要なものは次のとおりです。

読み込む必要がある整数の最大数は 28 です。これは C++ の Getline で簡単に実現できますが、以前の経験から、100,000 以上のそのようなファイルを処理する必要があり、各ファイルには 300,000 ~ 400,000 のような行が含まれている可能性があるためです。したがって、Getline を使用してデータを読み込み、ベクターを作成すると、重大なパフォーマンスの問題が発生する可能性があります。これを達成するために fscanf を使用しようとしました:

ただし、これにより fscanf が複数回呼び出され、パフォーマンスの問題が発生する可能性もあります。fscanf を使用して 1 回の呼び出しで可変数の整数を読み込む方法はありますか? または、文字列を読み取ってから strsep/stoi する必要がありますか? fscanf と比較して、パフォーマンスの観点から優れているのはどれですか?

0 投票する
1 に答える
3278 参照

c - Cでstrsepはどのように機能しますか?

私は、起動時にscanfでコマンドといくつかの引数を入力し、それらの引数を使用してexecvpを呼び出すプログラムを作成しています。私はstrsepでこれをやっています。文字列を配列 (char*) に格納し、それを分割して新しい配列にトークンを格納します (今回は配列 [] であるため、execvp で使用できます)。scanfで保存される引数は、ターミナルのコマンド ( 「ls」、「-l」 ecc、「pwd」など) である必要がありますが、変数はPATHに保存されます)、「」で区切られます。

入力の種類を指定するのは単なる例でした。私は execvp を単独で実行します。文字列をトークンに分割するには助けが必要です。これはコードです:

strsepを呼び出すために必要な 5 行目と 6 行目、dest[10]の 10はシンボリックです。

7 行目で入力を st に格納します。

9 行目は " " で分割し、コマンドと引数をdest[I] (execvp に渡します) に格納する必要があります。

11 行目で、dest に格納されている内容を出力します。

そして、これは悲しい出力です:

strsep の仕組みがわかりません。誰か助けてくれませんか?