プログラミングしているとcharとかstringってあるよな。変数の変数の型というものが違う様ですが、どう違うんでしょうな。文字と文字列の違いらしいが、列と言うからには並んでいるんでしょう。なぜ違うかや変換方法をプログラマでもあるライターのwoinaryと一緒に解説していきます。

ライター/woinary

某社で社内向け業務システムの開発、運用を30年近くやっていたシステム屋さん。現在はフリーランス。ガジェットやゲーム、ラノベが大好きなおっさんです。

charとstringの違いは?

image by iStockphoto

プログラミングしているとよく出てくるのが「変数」。何かの値をしまう箱と説明されます。この箱の中には数値や文字など格納することが可能です。charやStringは文字を格納する場合に関係します。

charとStringのざっくりとした違いは、変数に格納できる文字の長さcharは1文字だけ、Stringは1文字以上の複数の文字の並びを格納できます。

char:特定の1文字

charの変数には1文字だけ格納することができます。例えば「A」や「$」です。1文字だけなので「ABC」を格納しようとするとエラーになります。charには「1」や「9」などの数字も格納できます。ただ、これは文字としての「1」や「9」であり、数値とは別の扱いになるので注意が必要です。

String:文字の集まった文字列

1文字だけしか格納できないと困るので文字の並び、文字列を格納できる変数が必要ですよね。それがStringです。Stringの変数には「ABC」や「あいうえお」といった1文字以上の文字列を格納できます。1文字以上なので「A」などの1文字だけでも構いません

以上の説明を見ると、そもそもStringだけあればcharは不要と感じませんか?実は昔のプログラミング言語にはcharしかないものが普通でした。1文字しか格納できないcharだけでどうしていたのか、Stringがなぜできたのかは、次の節で説明します。

データ型とは?文字型と文字列型の差異の基本

image by iStockphoto

人間にとっては同じ「1」でも数値の「1」と文字の「1」は違うと説明しました。では、どうして区別できるのでしょう。実は変数には何を格納できるかが決まっています。これが変数の「データ型」、略して「型」と呼ばれるものです。charやStringも型の1つ。他には整数のintなどがあります。

ただし、プログラミング言語によって型があるものとないものがありますC言語やC++、C#、Javaは型があるプログラミング言語。PythonやJavaScriptは型がないプログラミング言語です。型がないと言っても表に出てこないだけで、コンピュータの中では数値か文字かを区別できるようになっています。

文字型は1文字

charは文字型と呼ばれています。最初にざっくり説明した通り、ここには1文字だけ格納することが可能です。また、ひらがなや漢字などの日本語の「あ」や「漢」の扱いはプログラミング言語によって違うので注意してください。最近のプログラミング言語では日本語も文字として扱うことができるものもありますが、古いものでは扱えないものもあります。

文字列型は1文字以上の並び

Stringは文字列型と呼ばれます。その名の通り「文字の列」なので、複数の文字を並べたものを格納可能です。もちろん、1文字だけでもOK

ただ、プログラミングしているときに1文字だけ扱いたいということは少ないです。Stringには1文字だけ格納することも可能なので、charってあまり意味がないように感じませんか。実は昔のプログラミング言語ではcharしかないものが普通。それでは不便なので文字列型が用意されました。そして今ではStringだけでcharがない言語もあります。C++、C#、Javaといった両方ある言語はその過渡期のプログラミング言語なのです。

文字型の配列と文字列型の違い

Stringがないプログラミング言語では1文字以上の文字列をどう扱うのでしょう。変数には値が1つしか入らない通常の変数の他に、複数の値を格納する配列変数があります。通常の変数は1戸建て、配列変数はマンションのような集合住宅みたいなものです。StringのないC言語ではcharの配列変数で文字列を格納します。

それならば他の言語でもcharの配列変数を使えば文字列変数は不要と考えるかもしれません。実は配列変数にはいくつか制限があります。例えば、配列の大きさは最初に定義したサイズから変更できないことが多いです。一方、Stringではそういう制限はありません。最初から文字列を扱うために作ったStringの方が扱いやすいのは当然ですね。

文字列変数と文字列リテラル

プログラムの中では文字列はダブル・クォーテーション(")で囲むことで表します。例えば"ABC"です。これを文字列リテラルと呼びます。英語ではliteralで「文字の」や「文字通りの」という意味です。例えば、「a = 1」であれば数値の1を変数に格納、「a = "1"」ならば文字列の1を変数に格納します。

文字の場合はダブル・クォーテーションではなくシングル・クォーテーション(')を使うプログラミング言語が多いです。ただし、言語によって違うため確認するようにしてください。

\次のページで「言語別、文字と文字列の細かい違いと変換方法」を解説!/

言語別、文字と文字列の細かい違いと変換方法

image by iStockphoto

charとStringが違うことはわかったとして、それらを変換するにはどうしたらよいのでしょう。プログラミング言語によって扱いが違うので、いくつかの言語で解説します。

文字と文字列:C言語

C言語にはStringはありません。文字列はcharの配列変数やポインタというものを使います。文字の配列変数はサイズを変更できないといった制限があるので、主に使うのはポインタです。ポインタの詳細の解説はまた今度としますが、以下のようなプログラムで文字や文字列を扱います。

#include <stdio.h>
int main(void){
   char a = 'a'; // 文字変数
   char* abc = "abc"; // 文字列(ポインタ)

   printf("文字:%c\n", a);
   printf("文字列:%s\n", abc);
}

基本データ型とクラス:C++言語

C++言語はC言語を元にしているので、Cと同じようにcharのポインタで文字列を扱うことは可能。ただ、別にstring型が用意されています。stringは文字列を扱うための機能が色々用意されているので便利です。

通常はstring型を使いますが、C++言語ではC言語で作ったプログラムを呼び出すこともできます。その場合はcharのポインタを使うことも必要です。そんな時のために変換できるようになっています。細かい説明は省略しますが、以下がサンプルです。

#include <iostream>
#include <string>
using namespace std;
int main(void){
   string str = "ABC"; // これはstring型の文字列
   // string型からcharへのポインタに変換
   const char* convert_from_string = str.c_str();
   cout << convert_from_string << endl;

   char* char_pointer = "XYZ"; // これはcharのポインタ
   // charのポインタからstring型に変換
   string convert_from_char_pointer = string(char_pointer);
   cout << convert_from_char_pointer << endl;
}

\次のページで「基本データ型とクラス:Java言語」を解説!/

基本データ型とクラス:Java言語

Java言語でも文字のchar型と文字列のString型があります。C++言語と違い、Stringだけで問題ないことも多いです。一応、変換するための方法が用意されています。文章で説明してもわかり難いので、サンプルプログラムにコメントをつけたものを以下に挙げておきますので、適宜参照してください。

import java.util.*;

public class Main {
   public static void main(String[] args) throws Exception {
      char char_a = 'A'; // 文字型です
      String str_a = String.valueOf(char_a); // 文字型からString型への変換 
      System.out.println(str_a);

      String str_abc = "ABC"; // String型です。
      char[] char_array = str_abc.toCharArray(); // String型からcharの配列に変換
      System.out.println(char_array);
   }
}

charは文字、Stringは文字列、長さがポイント

charとStringの違いは長さです。charは1文字で、Stringは1文字以上。文字型と文字列型と呼ぶこともあります。元々はchar型しかなかったのですが、プログラムで文字列を扱うことは多いですよね。そのため、文字列を扱う専門の仕組みが用意されたのが文字列型(String)。そのため、普段はStringしか使わないことも多いです。

ただ、場合によっては文字を扱うこともあるので、その違いや変換方法も押さえておくようにしましょう。

" /> charとStringの違いとは?データ型や変換方法もプログラマーがわかりやすく解説 – Study-Z
IT・プログラミング雑学

charとStringの違いとは?データ型や変換方法もプログラマーがわかりやすく解説

プログラミングしているとcharとかstringってあるよな。変数の変数の型というものが違う様ですが、どう違うんでしょうな。文字と文字列の違いらしいが、列と言うからには並んでいるんでしょう。なぜ違うかや変換方法をプログラマでもあるライターのwoinaryと一緒に解説していきます。

ライター/woinary

某社で社内向け業務システムの開発、運用を30年近くやっていたシステム屋さん。現在はフリーランス。ガジェットやゲーム、ラノベが大好きなおっさんです。

charとstringの違いは?

image by iStockphoto

プログラミングしているとよく出てくるのが「変数」。何かの値をしまう箱と説明されます。この箱の中には数値や文字など格納することが可能です。charやStringは文字を格納する場合に関係します。

charとStringのざっくりとした違いは、変数に格納できる文字の長さcharは1文字だけ、Stringは1文字以上の複数の文字の並びを格納できます。

char:特定の1文字

charの変数には1文字だけ格納することができます。例えば「A」や「$」です。1文字だけなので「ABC」を格納しようとするとエラーになります。charには「1」や「9」などの数字も格納できます。ただ、これは文字としての「1」や「9」であり、数値とは別の扱いになるので注意が必要です。

String:文字の集まった文字列

1文字だけしか格納できないと困るので文字の並び、文字列を格納できる変数が必要ですよね。それがStringです。Stringの変数には「ABC」や「あいうえお」といった1文字以上の文字列を格納できます。1文字以上なので「A」などの1文字だけでも構いません

以上の説明を見ると、そもそもStringだけあればcharは不要と感じませんか?実は昔のプログラミング言語にはcharしかないものが普通でした。1文字しか格納できないcharだけでどうしていたのか、Stringがなぜできたのかは、次の節で説明します。

データ型とは?文字型と文字列型の差異の基本

image by iStockphoto

人間にとっては同じ「1」でも数値の「1」と文字の「1」は違うと説明しました。では、どうして区別できるのでしょう。実は変数には何を格納できるかが決まっています。これが変数の「データ型」、略して「型」と呼ばれるものです。charやStringも型の1つ。他には整数のintなどがあります。

ただし、プログラミング言語によって型があるものとないものがありますC言語やC++、C#、Javaは型があるプログラミング言語。PythonやJavaScriptは型がないプログラミング言語です。型がないと言っても表に出てこないだけで、コンピュータの中では数値か文字かを区別できるようになっています。

文字型は1文字

charは文字型と呼ばれています。最初にざっくり説明した通り、ここには1文字だけ格納することが可能です。また、ひらがなや漢字などの日本語の「あ」や「漢」の扱いはプログラミング言語によって違うので注意してください。最近のプログラミング言語では日本語も文字として扱うことができるものもありますが、古いものでは扱えないものもあります。

文字列型は1文字以上の並び

Stringは文字列型と呼ばれます。その名の通り「文字の列」なので、複数の文字を並べたものを格納可能です。もちろん、1文字だけでもOK

ただ、プログラミングしているときに1文字だけ扱いたいということは少ないです。Stringには1文字だけ格納することも可能なので、charってあまり意味がないように感じませんか。実は昔のプログラミング言語ではcharしかないものが普通。それでは不便なので文字列型が用意されました。そして今ではStringだけでcharがない言語もあります。C++、C#、Javaといった両方ある言語はその過渡期のプログラミング言語なのです。

文字型の配列と文字列型の違い

Stringがないプログラミング言語では1文字以上の文字列をどう扱うのでしょう。変数には値が1つしか入らない通常の変数の他に、複数の値を格納する配列変数があります。通常の変数は1戸建て、配列変数はマンションのような集合住宅みたいなものです。StringのないC言語ではcharの配列変数で文字列を格納します。

それならば他の言語でもcharの配列変数を使えば文字列変数は不要と考えるかもしれません。実は配列変数にはいくつか制限があります。例えば、配列の大きさは最初に定義したサイズから変更できないことが多いです。一方、Stringではそういう制限はありません。最初から文字列を扱うために作ったStringの方が扱いやすいのは当然ですね。

文字列変数と文字列リテラル

プログラムの中では文字列はダブル・クォーテーション(”)で囲むことで表します。例えば”ABC”です。これを文字列リテラルと呼びます。英語ではliteralで「文字の」や「文字通りの」という意味です。例えば、「a = 1」であれば数値の1を変数に格納、「a = “1”」ならば文字列の1を変数に格納します。

文字の場合はダブル・クォーテーションではなくシングル・クォーテーション(’)を使うプログラミング言語が多いです。ただし、言語によって違うため確認するようにしてください。

\次のページで「言語別、文字と文字列の細かい違いと変換方法」を解説!/

次のページを読む
1 2 3
Share: