2012-04-09 14 views
1

私はC++の練習問題を次回のテストに備えるために取り組んでいます。以前は見たことのないforループ条件に苦しんでいます。forループの条件はいつ偽になりますか?

 for (int i = 0; s[i]; i++) 

メインから送られてきた文字列s"Two roofs to fix"

質問ループの条件のために偽になるだろうされているのですか?

+4

ヒント:文字列 ''修正する2つの屋根」には、文字列の末尾にヌルターミネータが付きます。ヌルターミネータが 'for'ループの2番目の式で何を評価すると思いますか? –

+1

だから、あなたはそれがそれ以上正しいことができないので、止めなければならない文字列の後に何を言っているのですか? – Ali

+1

@Ali:文字列の末尾にあるヌルターミネータ '\ 0'は、値0を持ち、falseに変換されます。 –

答えて

5

文字列の終端ゼロである'\0'がヒットした場合、ループ条件はfalseになります。 (if (0)はfalseと評価されます)

注意:この形式のテストは、文字列がヌル終了していない場合に発生する可能性のあるエラーです。

+2

-1:文字列が '\ 0'で終わっていることを知っていたら、私は彼が質問しなかったと確信しています。 –

+7

あなたは正しい答えのために私に-1を与えたいですか? –

+1

いいえ、*不完全*の場合。 –

2

@ MitchWheatの答えを明確にするために、条件として使用される式がif (x)のような値しか指定しない場合、実質的にif (x != 0)に相当します。値がポインタ型の場合は、代わりにif (x != NULL)に相当します(NULL == 0以降は実際には "代わりに"ではありません)。

1
#include<iostream> 
#include<string> 

using namespace std; 

int main() 
{ 
    string s = "Two roofs to fix"; 
    int i; 
    for (i = 0; s[i]; i++); 
    cout<<"i = "<<i<<endl; 
} 

上記のコードで問題をテストします。エラー "文字列の添え字が範囲外です"を返します。したがって、文字列sの長さがLenの場合、[Len]は不正です。 コードでは、sはポインタchar *ではなく文字列です。したがって、このようなコードには不適切です。

+1

彼は文字列を言ったが、 'std :: string'や' char * 'についてはっきりしなかった。彼は何の誤りも言及しなかったので、私はそれが 'char * sだと思います。 – loganfsmyth

関連する問題