文字 解答ページ | Programming Place Plus 新C++編

トップページ新C++編文字

このページの概要

このページは、練習問題の解答例や解説のページです。



解答・解説

問題1 (確認★)

int型、char型、std::string型の用途を説明してください。


int型は、整数を表現するための型です。

char型は、1つの文字を表現するための型です。2文字以上や0文字を表現することはできません(本編解説)。

std::string型は、0文字以上の文字列を表現するための型です。

問題2 (確認★)

'a'"a" の違いを説明してください。


'a' は、シングルクォーテーション(’) で囲っているので、文字リテラルの a です(本編解説)。文字リテラルなので、これは char型であり、1つの文字 a を表現しています。

"a" は、ダブルクォーテーション(") で囲っているので、文字列リテラルの a です。文字列リテラルは、0文字以上の文字列を書き表せますが、たまたま1文字だけだったということです。std::string型の変数に代入できますが、char型の変数には入りません(本編解説)。

std::string s {"a"};  // OK
char c {"a"};         // エラー

【上級】文字列リテラルそのものは std::string型ではなく、const付きの char型の配列です。

問題3 (確認★)

次のプログラムの実行結果はどうなりますか?

#include <iostream>
#include <string>

int main()
{
    std::string s1 {"\\n"};
    std::string s2 {"\"\""};
    std::string s3 {"\'"};

    std::cout << s1 << "\n";
    std::cout << s2 << "\n";
    std::cout << s3 << "\n";
}


エスケープシーケンスに関する問題です。(本編解説

"\\n" は、\\ の部分がエスケープシーケンスになっており、1つの \ になります。最後の n\ とはペアにならず、単なる n と扱われます。

"\"\"" は、\" がエスケープシーケンスになっており、1つの " になります。これが2回連続で登場するので、"" です。

"\'" は、\' がエスケープシーケンスになっており、1つの ' になります。実のところ、文字列リテラル内では ' は普通に書けるので、エスケープシーケンスを使う必要はありません。このエスケープシーケンスが必要になるのは、文字リテラルに ' を記述したいときです。

ということで、実行結果はこうなります。

\n
""
'

問題4 (確認★)

次のプログラムで、変数 c に入る文字は何ですか?

#include <iostream>
#include <string>

int main()
{
    std::string s {"\nHello\n"};
    char c {s[0]};
}


エスケープシーケンスは見た目に反して、1文字あつかいであることに注意してください(本編解説)。s[0] にあるのは \n です。

ですから、変数 c に入る文字は \n です(つまり改行)。

問題5 (基本★★)

文字の入力を受け取り、その文字を整数で表したときの値を出力するプログラムを作成してください。


たとえば、次のようになります。

#include <iostream>
#include <string>

int main()
{
    std::cout << "Please enter the character.\n";
    std::string s;
    std::cin >> s;

    int code = s[0];
    std::cout << code << "\n";
}

実行結果:

Please enter the character.
a    <-- 入力した文字
97

入力される文字が1文字の場合でも、std::string型の変数を使って受け取るようにします(本編解説)。

受け取った文字をそのまま std::cout に渡すと、それは std::string型、つまり文字列ですから、文字がそのまま出力されてしまいます。整数として出力させるためには、int型になおしてやる必要があります。

そこで、int code = s[0]; として、int型の変数に入れます。そして、この変数を std::cout に渡せば、整数が出力されます。

【上級】キャストでも構いません(std::cout << static_cast<int>(s[0]) << "\n"

問題6 (調査★★★)

ASCII の内容について調べてください。


ASCII の文字の一覧表はいたるところに掲載されているので、簡単に見つかるはずです。たとえば、Wikipedia にも掲載がありますし、プログラミング関係の書籍の付録などでも見かけることがあります。

調べれば出てくることですから ASCII の内容を記憶する必要はありませんが、いくつか特徴的な部分は知っておくといいです。


参考リンク



更新履歴




はてなブックマーク に保存 Pocket に保存 Facebook でシェア
X で ポストフォロー LINE で送る noteで書く
rss1.0 取得ボタン RSS 管理者情報 プライバシーポリシー
先頭へ戻る