文字列の比較

解決


origi  2004-11-15 04:21:48  No: 55180

if( szStr[i] == '_' && szStr[i+1] == 'L' && szStr[i+2] == 'e' &&
szStr[i+3] == 'v' && szStr[i+4] == 'e' && szStr[i+5] == 'l'&&
szStr[i+6] == '_' )

上の表記をもっと見やすくする方法、関数などは無いでしょうか?ありましたらその使用方法も教えてください。
これだとどうしても長い文字列の場合間違えやすいので。


monkey  2004-11-15 05:23:52  No: 55181

// C言語

#include <string.h>

    const char* str = "_Level_";

    if( strcmp( szStr, str ) == 0 )
        ; // do something


瀬戸っぷ  2004-11-15 05:35:19  No: 55182

> 上の表記をもっと見やすくする方法、関数などは無いでしょうか?
> ありましたらその使用方法も教えてください。
> これだとどうしても長い文字列の場合間違えやすいので。

'\0'で終わっているのか不明なんですが……(sz〜ってくらいだから終わっている筈でしょうが)
strncmp(szStr+i, "_Level_", 7) とか、
memcmp(szStr+i, "_Level_", 7) とかでしょうか?

# 7ってマジックナンバーがなんかイヤかも。

ちなみに、上記の場合だとszStrに入っているのが"Character_Level_Down"とか
そんなのでもお構いなしに判定されますがいいんですかね?
szStrが'\0'で終わっているなら、strstrで検索するとかあると思いますが。


origi  2004-11-15 05:39:13  No: 55183

monkeyさん、返答ありがとうございます。

szStrの最初からならこの方法でよいそうですが、
自分は多くの文字が入っている  szStr[100] からその特定の文字を探し出したら処理をする。というものを作っているので・・・。もしそのようなときにはどうすればいいのでしょうか?

自分の処理の方法:
for(i=0;i<StrNum; i++)
{
  if( Str[i] 〜 Str[i+6]に"_Level_"が入っていた場合)
     // 処理
}


origi  2004-11-15 05:44:44  No: 55184

瀬戸っぷさんも返答ありがとうございます。
なんかmonkeyさんに返事を書いている間に書き込まれちゃったみたいです。

瀬戸っぷさんのstrncmp()などは具体的にどのように使用すればいいのでしょうか?
szStrは[500]の配列なので。


origi  2004-11-15 05:50:27  No: 55185

できました!!ありがとうございます。
コードも(少しだけど)すっきりしました。瀬戸っぷさん、monkeyさん、
ありがとうございました!!


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加