[C++]シングルクォーテーションとダブルクォーテションの違い

プログラミング

はじめに

AtCoderで問題を解いている時に、C++におけるシングルクォーテーション(‘)とダブルクォーテション(“)の違いについて、理解しておらず、ハマったのでまとめておきます。

事の発端

int main() {
  string s;
  cin >> s;
  if(s[i] == "0"){
    ans += "0";
  }
}

上記のコードを書いたところエラーになりました。何故かというと、ifの条件のところを“0”としているからです。正解は‘0’としなくてはいけません。
シングルクォーテーションとダブルクォーテーションで何が違うのでしょうか。
答えは文字か文字列かという事です。

シングルクォーテーションとダブルクォーテションの違い

C++では、シングルクォーテーションで囲えるのは1文字だけなので、自然に文字となります。ダブルクォーテションで囲った時は例え1文字だけだったとしても文字列となります。
C++は、文字と文字列を別物と判別します。なので、中身の文字が一緒でも‘0’“0”はC++では別物となります。試しに、下記のコードを実行して型を調べてみます。
すると、‘0’“0”の型が違うものが出力されています。cはchar型という意味です。‘0’とs[0]はchar型ですが、“0”はA2_cとなって、型が違うことがわかります。
A2_cはどういう意味かというと、Aは文字列でchar形式の時は “A長さ_c”という形で表されます。つまり、A2_cは長さ2の文字列という意味です。1文字なのに、長さが2となるのは、文字列の場合には1番最後に’0’が付くためだそうですが、この辺はよくわかりません。

#include <bits/stdc++.h>
using namespace std;

int main() {
  string s = "Hello";

  cout << typeid('0').name()  << endl;   => c
  cout << typeid("0").name()  << endl;   => A2_c
  cout << typeid(s[0]).name()  << endl;  => c
}

まとめ

  • シングルクォーテーションで囲うと文字となり、ダブルクォーテションで囲うと文字列となる。
  • C++では文字文字列は別物として扱われる。

タイトルとURLをコピーしました