私はC++の練習問題を次回のテストに備えるために取り組んでいます。以前は見たことのないforループ条件に苦しんでいます。forループの条件はいつ偽になりますか?
for (int i = 0; s[i]; i++)
メインから送られてきた文字列s
は"Two roofs to fix"
質問ループの条件のために偽になるだろうされているのですか?
私はC++の練習問題を次回のテストに備えるために取り組んでいます。以前は見たことのないforループ条件に苦しんでいます。forループの条件はいつ偽になりますか?
for (int i = 0; s[i]; i++)
メインから送られてきた文字列s
は"Two roofs to fix"
質問ループの条件のために偽になるだろうされているのですか?
文字列の終端ゼロである'\0'
がヒットした場合、ループ条件はfalseになります。 (if (0)
はfalseと評価されます)
注意:この形式のテストは、文字列がヌル終了していない場合に発生する可能性のあるエラーです。
-1:文字列が '\ 0'で終わっていることを知っていたら、私は彼が質問しなかったと確信しています。 –
あなたは正しい答えのために私に-1を与えたいですか? –
いいえ、*不完全*の場合。 –
@ MitchWheatの答えを明確にするために、条件として使用される式がif (x)
のような値しか指定しない場合、実質的にif (x != 0)
に相当します。値がポインタ型の場合は、代わりにif (x != NULL)
に相当します(NULL == 0以降は実際には "代わりに"ではありません)。
#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 *ではなく文字列です。したがって、このようなコードには不適切です。
彼は文字列を言ったが、 'std :: string'や' char * 'についてはっきりしなかった。彼は何の誤りも言及しなかったので、私はそれが 'char * sだと思います。 – loganfsmyth
ヒント:文字列 ''修正する2つの屋根」には、文字列の末尾にヌルターミネータが付きます。ヌルターミネータが 'for'ループの2番目の式で何を評価すると思いますか? –
だから、あなたはそれがそれ以上正しいことができないので、止めなければならない文字列の後に何を言っているのですか? – Ali
@Ali:文字列の末尾にあるヌルターミネータ '\ 0'は、値0を持ち、falseに変換されます。 –