質問: 【参考書】 ・やさしいC++ 【わからなかったところ】 ・文字列の長さの求め方 ・NULL文字について 以下に問題文を記述します。 ------------- 文字列の長さを調べる関数int length(char* str)を作成してください。実際にキーボードから文字列を入力して文字列の長さを調べるコードを記述してください。 ↓ 【出力される文】 ``` 文字列を入力してください。 Hello 文字列の長さは5です。 ``` これに対してわたしが書いてみたコードです。 --------------------- ``` #include #include using namespace std; int lenght(char*str){ int a=strlen(str); return a; } int main(){ char str[10]; cout<<"文字列を入力してください。"<>str; int ans=lenght(str); cout<<"文字列の長さは"< using namespace std; int lenght(char* str){ int i=0; while(str[i]){ //ここがよくわからないところ i++; } return i; } int main(){ char str[100]; cout<<"文字列を入力してください。"<>str; int ln=lenght(str); cout<<"文字列の長さは"<
回答: > > 最後の'\0'(NULL文字)がきたとき、false(つまり0)になるからループを抜けられてi++をされない、i++されたのは、true(整数値をbool型に変換して、0以外の整数)の数という意味なのでしょうか? > > > かなり回りくどい言い方ですが、おおむね正しい解釈だと思います。 > > char型の配列の要素であるHなどを数値に置き換えて、判断しているのかわからない > > > 数値に置き換えているのではなく、C/C++でのchar型はもともと整数です。 intよりも狭い範囲の数を表すことができるので、文字を扱う際に主に用いられているだけです。 > > そもそもNULL文字が==0なのかがわからないし、Hなどの文字が0以外であるかどうかもわからない > > > ASCIIコードに従います。ASCIIコード表 ついでに 参考書の模範解答について、絶対に従わない方がいい部分が一か所あります。 **追記:充分理解した上で使いこなせるなら、この限りではありません。** > > > ``` > using namespace std; > ``` > > 名前空間のメリットを完全に潰してしまう一文です。 また、どこまでが標準名前空間の機能であるのかも、不明瞭になってしまいます。 これを用いない場合、coutなどを用いる際にstd::coutと記述する必要があります。 面倒に思えるかもしれませんが、この面倒さが名前の衝突を防いでいると思えば安いものです。 なお、ご覧になっている参考書は、かなりC寄りのC++を扱っています。 無駄にはならないと思いますが、実際のC++のコードを見る際に、違和感があるかもしれません。 ちょっとC++っぽく書いたのがこちら。 ``` #include #include #include size_t length(const std::string& str) { return str.length(); } int main(void) { std::string str; std::cout << "文字列を入力してください。" << std::endl; std::cin >> str; std::cout << "文字列の長さは" << length(str) << "です。" << std::endl; return 0; } ```