
strstr()関数が、どのように実装されてるか知りたかったため、strstr.cの中身を見てみたのですが、
分らない処理がありました。
char * __cdecl strstr (const char * str1, const char * str2)
{
char *cp = (char *) str1;
char *s1, *s2;
if ( !*str2 )
return((char *)str1);
while (*cp)
{
s1 = cp;
s2 = (char *) str2;
while ( *s1 && *s2 && !(*s1-*s2) )
s1++, s2++;
if (!*s2)
return(cp);
cp++;
}
return(NULL);
}
while文のネストの部分で、*s1 && *s2 && !(*s1-*s2)とありますが、
(*s1 && *s2) または !(*s1-*s2) のどちらか一方のみではまずいのでしょうか?
解説、アドバイスの程よろしくお願い致します。
No.3ベストアンサー
- 回答日時:
>(*s1 && *s2) または !(*s1-*s2) のどちらか一方のみではまずいのでしょうか?
while ( *s1 && !(*s1-*s2) )
で十分です。
*s1、*s2ともナル文字以外の時は、!(*s1-*s2)の結果、等しい間のみループします。
*s1がナル文字以外、*s2がナル文字の時は、!(*s1-*s2)が0になるのでループを抜けます。
*s1がナル文字、*s2がナル文字以外の時と、*s1、*s2ともナル文字の時は*s1が'\0'ですのでループを抜けます。
お返事が遅くなってしまいありがとうございました。
大変分かりやすい場合分けをして頂いたお陰で理解できました。
ありがとうございました。
標準関数の実装内容をより簡単に(シンプルに?)できる場合もあるんですね。勉強になりました。
No.2
- 回答日時:
*s1 && *s2
これで、両方の文字がまだあるかを検査しています。
どちらかが文字列の終了になると、この条件は成立しなくなります。
!(*s1-*s2)
これで、文字の一致を見ています。
*s1と*s2が同じ文字の場合は0(偽)になりますので、それの否定(真)ですので一致している間ループ処理が行われます。
一致しないと0では無くなります(真)ので、それの否定(偽)ですのでループ脱出となります。
ということで、どちらの条件も必要不可欠ということになります。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
他言語で言うcontinue文
-
Aの値からBの値を除するとは??
-
信頼区間の1.96や1.65ってどこ...
-
20'(角度)の計算がわかりま...
-
「指定されたキャストは有効で...
-
独立係数について教えて下さい。
-
「Aに対するBの割合」と「Aに対...
-
scanfの入力をgets関数で読み捨...
-
2番以降って2番も含まれますか...
-
エクセルで可視セルにのみ値貼...
-
C言語での引数の省略方法
-
return 1L
-
Enterキーを押されたら次の処理...
-
c languageで 簡単な質問があ...
-
静的でないメンバ関数の呼び出...
-
プログラムでの数字につく”f”の...
-
マイナスからプラスへ転じた時...
-
cshの文字列操作(0埋め)
-
C言語 行列計算
-
中学生で数学です。 √84nが自然...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
do-while文が禁止される理由
-
C言語forループが完結した場合...
-
ループを途中で抜けたいのですが。
-
入力した数値を倍々するプログラム
-
エクセルVBAで Do While (1)って?
-
UWSCにてある一定の動作を無限...
-
break文でループを一気に抜ける...
-
Excel VBAで年度をまたぐ期間の...
-
プログラムで関数は使わない方...
-
PAD図の書き方
-
C言語、whileループを抜け出す...
-
VBScriptでSQLに接続し、CSV出...
-
プログラムの解説をお願いします。
-
Delphiで・・・
-
clock関数を利用した時間計測法...
-
__asm int 3でのブレイクポイン...
-
入力した文字列から母音だけを...
-
ループの特定入力終了
-
Cプログラムが終了しない
-
if文の中にfor文なのか、for文...
おすすめ情報