2016-04-28 17 views
5

Octaveには、セル配列内に文字列が最初に現れる位置が返されますか?Octave - セル配列に文字列が最初に現れる位置を返す

私はfindstrを見つけましたが、これは、私が望まないベクトルを返します。私はindexが何をしたいのですが、それは文字列のためだけに働きます。

このような機能がない場合は、どうすればいいですか?

+0

あなたは、各セルまたはセル配列全体の最初のオカレンスをしたいですか? – excaza

+0

この質問は、**すべての出現**ではなく、文字列の最初の出現**を探すよう求められているので、重複から再開しました。受け入れられた答えは、文字列を見つけることができないというニュアンスも処理します。 この質問には基本的な違いがあり、異なる解決策につながります。 – rayryeng

答えて

5

findstrが推奨されなくなりましたので、findstrcmpiの組み合わせが役立つことがあります。 strcmpiは、目的に合った文字の大文字小文字を無視して文字列を比較します。これがあなたの望むものでない場合は、末尾にiの関数を使用してください。したがって、strcmpです。 strcmpiまたはstrcmpに入力str検索する文字列であり、あなたのケースのための追加の入力パラメータは、で検索する文字列のセル配列Aである。strcmpiまたはstrcmpの出力はあなたにそれぞれの場所がklogical値のベクトルを与えますセル配列Aの文字列kstrと一致するかどうかを示します。文字列が一致した場所をすべて見つけるにはfindを使用しますが、最大文字数nを指定して検索を制限する場所を指定することでさらに制限できます。具体的には、最初または最後の文字を表示する場合はn文字列が一致した場所。

目的の文字列はstrであり、あなたのセルアレイがAに格納され、単純に行う場合は、次の2番目と3番目のパラメータが教えてくれながら

index = find(strcmpi(str, A)), 1, 'first'); 

繰り返すと、findは、文字列が一致したすべての場所を検索します結果の最初のインデックスのみを返すようにします。具体的には、これは検索された文字列の最初の出現を返します。見つからない場合は空の配列を返します。

実行例

octave:8> A = {'hello', 'hello', 'how', 'how', 'are', 'you'}; 
octave:9> str = 'hello'; 
octave:10> index = find(strcmpi(str, A), 1, 'first') 
index = 1 
octave:11> str = 'goodbye'; 
octave:12> index = find(strcmpi(str, A), 1, 'first') 
index = [](1x0) 
+1

'strcmp' /' strcmpi'は* full *文字列だけを比較することに注意してください。存在する部分文字列を検索する場合は、おそらく正規表現を使う必要があります。 – excaza

+0

@excaza良いコメント。 OPは完全な文字列を検索したいと思っていました。言語はそれを示唆していますが、私の前提は@ $$の前に私を噛まれています。 – rayryeng

+1

@rayryengこれは完璧です!ありがとうございました。そしてあなたは仮定が正しいと思っています。私は完全な文字列を検索したいと思っていました。 – CH123

関連する問題