- 締切済み
文字列を抜き出す方法
はじめまして。よろしくお願いします。 連続して送られてくる文字列の中から、ある文字列を抜き出す方法が分からず、苦戦しています。 何をどう調べていいのか分かりません。 解答というより、どういう方法で抜き出せばいいのか、ヒントみたいなものを教えていただければと思います。 C歴はかなり浅いので、まだまだ勉強中です。 すみませんがよろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- MrBan
- ベストアンサー率53% (331/615)
#2です。 > たとえば、時刻情報をだけを抜き出して表示させてみようとしているのですが、その部分の抜き出し方が分かりません。 Cの標準関数による比較は、基本的に文字列が完全に一致するものが対象です。この場合はおそらくstr~は使えません。 (例えば"01:23"は探せても、"01:24"になったら違う文字列と認識されます) GPSデータのフォーマットは詳しくありませんが、おそらく固定長になっていると思いますので、それにあわせて、先頭から特定のオフセットにあるデータを抜き出すような作りにする必要があります。 例えば、"[01:23][01:24][..." というデータがあるとして、'['の位置を最初に特定すれば、'['を含む7文字を抜き出すと一個分のデータが抽出できます。 次の'['は、今の'['から7文字進んだところにあります。
- MrBan
- ベストアンサー率53% (331/615)
文字列が、適当なサイズでバッファ領域などに格納されてくるなら、 領域の終端('\0')保証をした上で strstr 標準関数を使えば、 部分文字列が検出できます。(Cの場合) 終端保証できる文字列比較で先頭が特定できるなら、strcmp、strncmp も使えます。 (終端保証がないなら文字列ではないので memcmp) それで効率が悪い(処理が追いつかない)場合や、 文字が単体で順次入力されてくるのなら、 簡単な有限状態マシンなどを作って、入力文字に応じて状態を遷移させていくのがいいかもしれません。 もう少し、具体的な情報があると、より適切な方法が見つかるかも知れません。
- tatsu99
- ベストアンサー率52% (391/751)
>連続して送られてくる文字列の中から というのがどういう状況かは判りませんが、 1)力ずくである文字列を抜き出すなら、文字の比較関数(memcmp)を使えば、特定の文字列であるかどうか判定可能です。 2)しかしながら、パフォーマンスなどを考慮した場合、やみくもにmemcmpを使用しつづけることは、推奨されません。 3)もう少し、具体的な状況を提示されれば、もっと良い回答が得られるでしょう。 例えば、「TCP/IPで受信中に、受信文字のなかに ABCかvwxyzがあるかどうかをチェックしたい」等の例です。
補足
即答ありがとうございます。 今、趣味でチャレンジしていることは、GPSからのデータを受信して、 PICを介してLCDに表示させてみようっと思っています。(C言語を使っています) なんとか、どんどん送られてくる情報を、ただ単に表示させることは出来たのですが、 その中から必要な情報を抜き出すことに四苦八苦しています。 たとえば、時刻情報をだけを抜き出して表示させてみようとしているのですが、 その部分の抜き出し方が分かりません。 実はまだ、入出力程度しかCは理解していなくて、文字列の扱い方や ポインタとかっていうのもが必要なのかなぁって気はしているため、 なんとなく本を読んで雰囲気は分かったのですが、具体的にどう使って いいのか分からず悩んでいます。 だったら、やるな!っても友達に言われました。 でも、いろいろなホームページを見ていると面白そうなので、チャレンジを 始めたのですが、現在、こういう状況です。 こんな私にでもアドバイスをいただけるのでしたら、よろしくお願いします。
お礼
ありがとうございます。 さっそくstrstr関数やstrcmp、str・・・っていうのを本で見てみました。 なんとなく意味はわかりました。なんか、いけそう?な気もします。 でも、具体的にどうやって使えばいいのか分からず、また悩んでいます。 ん~難しい。 もう少し調べてみます。 ありがとうございました。