2017-03-28 7 views
0

私は、ある種の文字シーケンスが現れる時間を数えなければならないバイナリデータの配列を持っています。 針が見つからない場合、私は「干し草の山」cアレイを前進させて配列のスライスを取る

int indexOf(const char *needle, int needleLen, const char *haystack, int haystackLen) { /.../ } 

に「針」のインデックスを見つけるために、機能を定義した瞬間にそれはそれ以外の場合は、インデックスを返し、-1を返します。

次のステップは、while -loop(-1まで)で実行してカウントを取得することです。

私の質問は:私はhaystackにインデックスを見つけた時はいつでも、私は最初の文字のindexOfによって決まるがオフにchompされていhaystackのスライスを取る方法を教えてください。

例: 私の干草はhello_world、針はoです。 indexOf4を返します。 hello worldのスライスを最初の4文字なしで使用するにはどうすればよいですか? など。私が望む_world

+0

あなたの 'indexOf'関数に害はありませんが、[' strstr'](http://en.cppreference.com/w/c/string/byte/strstr)を使わないのはなぜですか? – StoryTeller

+0

確かにstrstrはバイナリデータでは機能しません。また、\ 0が発生してもそれ以上は見えません。 – Seneca

答えて

4

私のhaystackはhello_worldです、針はoです。 indexOfは4を返します。最初の4文字を使わずにhello worldのスライスを取得するにはどうすればよいですか?例えば。私が望む_world

インデックスが4の場合は、最初の5文字はスキップする必要があります(Cのインデックスは0ベースです)。

これはhaystack + 4 + 1です。それに応じて、それに応じてhaystackのサイズを更新することを覚えておいてください。

またはC:

idxが4であれば、それは以降のインデックス5から見ていきます
idx = indexOf(needle, needleLEn, haystack + idx + 1, haystackLen - idx - 1); 

+0

Cコードで例を挙げられますか? 'newHaystack = haystack + 4 + 1'? – Seneca

+0

次のindexOfの呼び出しは 'indexOf(needle、needleLEn、haystack + 4 + 1、haystackLen - 4-1)'となります。 – JeremyP

+0

素早く優れた応答をありがとう! – Seneca

関連する問題