文字とアスキーコード

コンピュータの内部では整数や実数だけでなく文字も数値として扱われています。そこでコンピュータでは、整数値と文字を対応させて文字情報を処理しています。文字に対応付けられた数をアスキーコードといいます。 たとえば、次のコードは、文字と対応するアスキーコードを表示します。

let ch = 'A';
console.log(ch + " = " + ch.charCodeAt(0));

let num = 122;
console.log(String.fromCharCode(num) + " = " + num);

charCodeAt 関数は指定された位置にある文字を 0 から 65535 までのUTF-16 コードユニットを表す整数で返します。
fromCharCode 関数は指定された UTF-16 コードユニットの並びから生成された文字列を返します。


上のコードの標準出力は次の通りです。

A = 65
z = 122

これは、文字 'A' のアスキーコードが 65 であり、アスキーコード 122 に対応する文字が 'z' であることを示しています。つまり、'B', 'C', ... のアスキーコードが66, 67, ... で、'a', 'b', 'c', ... のアスキーコードが97, 98, 99, ... となることが分かります。

文字列

文字の並びを文字列と呼びます。Stringは文字を管理する組み込みオブジェクトです。基本型と同様に、初期値を設定して文字列の変数を宣言することができます。文字列の長さは、当該文字列のlengthプロパティで取得できます。charAtメソッドで、文字列の指定された場所の文字を取得することができます。これらのメソッドは、. (ドット) 演算子で呼び出します。たとえば、Stringオブジェクトの変数lineから、1文字ずつ文字を読み込むには、以下のように書きます。

let line = 'Hello World';

let ch = '';
for (let i = 0; i < line.length; i++) {
	ch += line.charAt(i);
}

console.log(ch); // Hello World が出力される

文字の判定

文字が(アスキーコードによって)数値で表されていること、アルファベットには連続した数値が割り当てられていることを利用すると、文字の比較や変換は、数値と同じように行うことができます。たとえば、

'a' <= ch && ch <= 'z'

を満たせば、文字chは英小文字です。また、'a'と'A'の差('a' - 'A')が32であることから、chが小文字の場合は32を引くことにより対応する大文字に変換することができます。一方、chが大文字の場合は32を加算することにより対応する小文字を得ることができます。


たとえば、このような計算をして、小文字を大文字に変換するには、以下のように書くことができます。

let ch = 'b';
if ( 'a' <= ch && ch <= 'z') {
	console.log(String.fromCharCode(ch.charCodeAt()-('a'.charCodeAt() - 'A'.charCodeAt())));
} 

文字列を処理するメソッド

文字列を処理する上で便利で様々なメソッドが標準で利用できます。基本的に以下の形式で実行します。

文字列.メソッド()

小文字・大文字の変換は以下のメソッドを使うことができます。

  • String.toUpperCase(): 文字をすべて大文字に変換する
  • String.toLowerCase(): 文字をすべて小文字に変換する

JavaScriptでの比較

JavaScriptの比較演算子は、等価演算子(==)と厳密等価演算子(===)が存在します。
等価演算子は、二つの値が等しいかどうかを検査し、論理値を返します。等価演算子において、型が異なる場合は型の変換をしてから比較を行う必要があります。
一方で、厳密等価演算子では二つの値が等しいかどうかを検査するだけではなく、型も等しいかどうか検査を行います。同じ値であっても、型が異なる場合は常に異なるものとして判断されます。
具体例を以下に示します。

// 整数同士の比較
let a = 2;
let b = 2;
console.log(a == b); // trueが出力される
console.log(a === b); // trueが出力される

// 文字同士の比較
a = 'abc';
b = 'abc';
console.log(a == b); // trueが出力される
console.log(a === b); // trueが出力される

// 数字と文字の比較
a = 2;
b = '2';
console.log(a == b); // 型は違うが、同値であるためtrueが出力される
console.log(a === b); // 型が違うので、falseが出力される

Reference

 

オンラインジャッジではじめるC/C++プログラミング入門 (マイナビ)

AIZU ONLINE JUDGE のコース問題を題材にした解説書です。各トピックごとに C/C++ 言語の基礎的な内容を学習し、Introduction to Programming の演習問題にチャレンジしていきます。内容は敷居の高いものではなく、プログラミング初学者が取り組む例題からスタートしています。