C言語 charの使い方

この記事のポイント

この記事では、C言語で文字を扱うための基本となる char 型について紹介します。

文字の出力や代入といった基本操作から、配列や文字列への応用まで解説します。段階的に学習を進めることで、C言語における文字データ処理の全体像を把握できるようになります。

  • C言語で1バイト文字データを格納するデータ型の基本機能
  • 文字リテラルや文字列操作における具体的な記述方法
  • 実際のプログラムで活用できる多様なコード実装例

これらのポイントを理解することで、C言語における文字データの扱い方を体系的に把握できるようになります。

目次

charとは?

char型は、C言語において1バイトサイズの文字データを格納するために使用される基本的なデータ型です。ASCII 文字コードに対応した英数字や記号を扱い、C言語における文字処理の基盤となります。

char型は文字として表示されますが、内部的には数値として管理されている整数型の一種です。内部的に数値として扱われるため、文字の比較や演算処理を行うことも可能です。さらに、配列と組み合わせて文字列として扱うこともでき、テキストデータを扱う基本的な仕組みとして機能します。

【関連】
C言語をもっと詳しく学ぶならpaizaラーニング

基本構文

char型の宣言と初期化は、変数名の前にcharキーワードを記述することで行います。文字リテラルはシングルクォートで囲んで表現し、直接文字を代入できます。また、文字コード値を数値として代入することも可能です。

以下のコード例では、char型変数の基本的な使い方を示しています。文字の出力にはprintf関数の%c指定子を使用し、数値として表示する場合は%d指定子を利用します。

#include <stdio.h> int main() { char letter = 'A'; char code = 65; printf("文字: %c, コード: %d\n", letter, code); return 0; }

出力結果

文字: A, コード: 65

C言語のcharは数値を扱う整数型の一つです。文字も内部では数値として管理されているため、下記のコード例のように、「文字も数値として計算できる」という特徴があります。英大文字(A〜Z)や英小文字(a〜z)は順番に並んだ数値として定義されており、「'C' + 1」は’D’を意味します。

#include <stdio.h> int main() { char animal_initial = 'C'; char next_char = animal_initial + 1; printf("%c の次の文字: %c\n", animal_initial, next_char); return 0; }

出力結果

C の次の文字: D

実用例

ここからは、char型を用いた実践的なコード例を紹介します。

各サンプルコードでは、日常的なプログラミング作業でよく遭遇する文字処理の場面を想定し、具体的な実装方法を示しています。文字の入出力をはじめ、配列を利用した文字列操作、文字コードの変換、条件判定による文字の分析、検索や置換といった処理まで、幅広い内容を取り上げます。

これらの例を通じて、char型を状況に応じて柔軟に活用する方法を理解していきましょう。

文字配列を使った名前管理

複数の文字を配列で管理し、順番に表示するプログラムです。 char型は1文字分のデータを表す型ですが、配列を利用することで文字列を扱うこともできます。

#include <stdio.h> int main() { char animals[] = {'a', 'n', 'i', 'm', 'a', 'l', 's'}; int count = sizeof(animals) / sizeof(animals[0]); int i; for (i = 0; i < count; i++) { printf("%d番目: %c\n", i + 1, animals[i]); } return 0; }

出力結果

1番目: a
2番目: n
3番目: i
4番目: m
5番目: a
6番目: l
7番目: s

上記は文字配列を使って複数の文字を効率的に管理する方法を示すコード例です。forループと組み合わせることで、配列内の文字を順に処理します。あわせてsizeof演算子を使った配列サイズの取得方法も学べます。この手法は、大規模なデータ処理にも共通する基礎として重要です。

文字コード変換処理

英大文字と小文字の変換を行う実用的な処理例です。

#include <stdio.h> int main() { char upper = 'L'; char lower = upper + 32; char back_to_upper = lower - 32; printf("大文字: %c\n", upper); printf("小文字: %c\n", lower); printf("大文字に戻す: %c\n", back_to_upper); return 0; }

出力結果

大文字: L
小文字: l
大文字に戻す: L

ASCII コードの性質を利用し、大文字と小文字の文字コード差が3 である点に着目した変換処理を実装しています。この差を活用すれば、単純な数値の加減算による文字変換が可能です。標準ライブラリに依存しないASCII値を用いた実装であるため、文字コードの内部構造への理解が深まります。

文字判定とカウント機能

入力された文字の種類を判定し、分類してカウントする処理です。

#include <stdio.h> int main() { char test_chars[] = {'a', '5', 'Z', '#', 'b'}; int alpha_count = 0 , digit_count = 0; for (int i = 0; i < 5; i++) { if ( (test_chars[i] >= 'A' && test_chars[i] <= 'Z') || (test_chars[i] >= 'a' && test_chars[i] <= 'z') ) { alpha_count++; } else if (test_chars[i] >= '0' && test_chars[i] <= '9') { digit_count++; } } printf("英字: %d個, 数字: %d個\n", alpha_count, digit_count); return 0; }

出力結果

英字: 3個, 数字: 1個

文字の範囲チェックを用いて、文字の種別を判定する実装例です。ASCII 文字コードの順序性を利用することで、効率的に判定を行っています。複数の条件を組み合わせることで、状況に応じた柔軟な文字分類が可能です。

文字列検索と置換処理

文字配列内で特定の文字を検索し、別の文字に置き換える処理です。

#include <stdio.h> int main() { char word[] = {'P', 'a', 'n', 'd', 'a'}; char target = 'a' , replacement = 'o'; int size = 5; printf("置換前: "); for (int i = 0; i < size; i++) { printf("%c", word[i]); if (word[i] == target) { word[i] = replacement; } } printf("\n置換後: "); for (int i = 0; i < size; i++) { printf("%c", word[i]); } printf("\n"); return 0; }

出力結果

置換前: Panda
置換後: Pondo

配列内の文字検索と置換を同時に行う効率的な処理方法を実装しています。動物名を使い、処理結果を親しみやすいものにしました。一度のループ処理で検索と置換を完了させることで、処理速度の向上を図っています。この手法は、テキスト編集や文字列加工の基本的な操作として幅広く応用されています。

バイトデータとしての利用

文字ではなく「8ビットの生データ(バイナリデータ)」を扱うためのコード例です。組み込みシステム、ネットワーク通信、ファイルI/Oなど、文字ではなくバイナリデータを扱う場合などに、char型、特に unsigned char)が使われます。

#include <stdio.h> int main() { /* 255 までの値を格納できる unsigned char を使うのが一般的 */ unsigned char buffer[4] = {0xAA, 0xBB, 0xCC, 0xDD}; int i; /* ネットワークパケットの処理など */ for (i = 0; i < 4; i++) { printf("バイト %d: 0x%02X\n", i, buffer[i]); } return 0; }

出力結果

バイト 0: 0xAA
バイト 1: 0xBB
バイト 2: 0xCC
バイト 3: 0xDD

1バイト単位の値を直接扱うことで、さまざまなデータを精密に処理できます。例えば、画像や音声などのファイルは「文字列」ではなく「バイトデータ」として扱われます。また、ネットワーク通信で送受信されるデータもバイト列です。

実務でメモリ操作やデバッグを行うためにも、文字・文字列・バイトデータの違いを理解することが重要です。

まとめ

char型は、C言語における文字データ処理の中核を担う基本的なデータ型として、プログラミングの多くの場面で活用されています。文字リテラルの扱いから配列を使った文字列操作まで、幅広い用途に対応できる柔軟性を持っています。

charの活躍する場面

  • テキストファイルの読み込みや書き込み処理における文字単位の操作
  • ユーザーインターフェースでのキーボード入力の受け付けと文字判定
  • 文字列検索や置換などのテキスト加工処理での基本要素として

重要なポイント

  • 文字と数値の双方として扱えるため演算処理も可能である特性
  • 配列と組み合わせることで文字列として機能する拡張性
  • ASCIIコードの理解により効率的な文字操作が実現できる仕組み

これらの知識を活用すれば、文字データを扱うプログラムをより的確かつ効率的に設計できるようになります。char型の基本的な使い方を確実に身につけ、実際のプログラミング作業に積極的に活用していきましょう。継続的にコードを書きながら理解を深めることで、文字処理に関する技術が着実に向上します。

レベルを更に上げたい方はpaizaプログラミングスキルチェックへ

  1. paizaラーニングトップ
  2. リファレンス
  3. C言語のリファレンス記事一覧
  4. C言語 charの使い方