CプログラミングⅠ
文字と文字列
文字
1文字からなるデータ
データ型はchar(character)型
char型変数に1文字ずつ格納
int main(void) {
char a, b, c, d, e;
a = 'H';
b = 'e';
c = 'l';
d = 'l';
e = 'o';
printf("%c%c%c%c%c¥n", a, b, c, d, e);
}
a
複数の文字を扱おうとすれば その分のchar型変数を
用意する必要がある
b c d e
'H' 'e' 'l' 'l' 'o'
文字 : ひとつのchar型変数に ひとつの文字データのみ
変換仕様は%c
int main(void) {
char c = 'a';
char ch;
ch = 'b';
・・・・・
}
文字の代入,初期化
char型変数に文字を代入,初期化するときには,
文字を ’ ’で囲む
文字型変数の初期化
文字型変数の初期化
文字の出力
printf文を用いた出力では,変換仕様に %c を用いる
int main(void) {
char ch = 'A';
printf(" %c は文字です.¥n", ch );
printf(" %c も文字です.¥n", 'F' );
return 0;
}
printf(" %c ", [文字,文字型変数]);
’ ’を使って,直接文字を出力することもできる
A は文字です.
F も文字です.
文字の入力
scanf文を用いた入力では,変換仕様に %c を用いる
入力の際に,[Enter]も文字データ(改行)として入力 対象となるので注意
char ch;
scanf(" %c ", &ch );
printf("ch : %c¥n", ch);
scanf("%c", &ch);
printf("ch : %c¥n", ch);
printf("end¥n");
scanf(" %c ", &[文字型変数名] );
A[Enter]
ch : A ch : end
[Enter]が文字データとして 自動的に入力されてしまう
[Enter]が改行として 表示される
文字コード
文字に対して割り当てている数値
コード体系として,JIS,ASCII,EUC,UTFなどがある
半角英数字については,どの体系でも同じ数値が 割り当てられている.
文字 文字コード
A 65
B 66
C 66
: :
Z 90
文字 文字コード
a 97
b 98
c 99
: :
z 122
文字 文字コード
0 48
1 49
2 50
: :
9 57
文字コードを利用した処理
文字コードを利用して,文字・文字列処理が行える プログラムが作成できる
入力した文字がアルファベットの小文字かどうか判定するプログラム 1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
#include <stdio.h>
int main(void) {
char c;
printf("文字入力:");
scanf("%c", &c);
if( c >= 'a' && c <= 'z' ){
printf("%cはアルファベット小文字です¥n", c);
} else {
printf("%cはアルファベット小文字ではありません¥n", c);
}
return 0;
}
入力された文字のコードが
'a' のコードから 'z' のコードの範囲に 入っているかどうか
f[Enter]
fはアルファベット小文字です
文字列とは
複数の文字の並び
char(文字)型の配列で扱うことのできるデータ
char型の配列に文字列を格納
int main(void) {
char str[6];
str[0] = 'H';
str[1] = 'e';
str[2] = 'l';
str[3] = 'l';
str[4] = 'o';
str[5] = '¥0';
}
str[0]
'¥0' (NULL文字)は文字列の最後を表す 文字列を作成するときは最後の要素に
必ず '¥0' を入れなければならない
文字列を格納する配列の要素数は
[文字数+1]だけ用意する必要がある str[1] str[2] str[3] str[4] str[5]
'H' 'e' 'l' 'l' 'o' '¥0'
文字列 : char型の配列要素に1文字ずつ格納 最後の要素に'¥0'(NULL文字)を格納
必ず最後の要素に '¥0'(NULL文字)を入れる
文字列の初期化
宣言時に文字列を ” ” で囲って格納することができる
int main(void) {
char str[6] = {'H','e','l','l','o','¥0'};
char str[] = {'H','e','l','l','o','¥0'};
char str[6] = "Hello";
char str[] = "Hello";
str = "Hello";
}
配列の初期化方法によって 文字列の初期化ができる
" " によって初期化することもできる 'o'の次の要素に自動的に'¥0'が入る プログラム本文中で,配列名に対して
" " によって代入することはできない
文字列の出力
printf文を用いた出力では,変換仕様に %s を用いる
int main(void) {
char str[6] = "Hello";
printf(" %s は文字列です.¥n", str );
printf(" %s も文字列です.¥n", "Fukuoka" );
return 0;
}
printf(" %s ", [文字列配列名]);
” ” を使って,直接文字列を出力することもできる Helloは文字列です.
Fukuokaも文字列です.
文字列の入力
scanf文を用いた入力では,変換仕様に %s を用いる
& は記述しなくてよい
int main(void) {
char str[100];
scanf(" %s ", str );
printf(" 入力された文字列は %s です.¥n", str);
return 0;
}
scanf(" %s ", [文字列配列名]);
配列名のみ( & はつけない)
なるべく大きな配列を用意する
Hello[Enter]
入力された文字列はHelloです.
文字列の扱い(文字列処理)
文字列の最後にNULL文字('¥0')があることを利用
文字列を処理するときは要素(1文字)ごとに行う
int main(void) {
char str[6] = "Hello";
int i;
i = 0;
while( str[i] != NULL ){
printf("%c*", str[i]);
i++;
}
return 0;
}
文字列配列の要素が NULL文字('¥0')でない間 繰り返す
'¥0' の代わりに NULL と 書くこともできる
1文字ずつ出力
文字の出力は変換仕様に
%c を用いる
H*e*l*l*o*
文字データのまとめ
文字データ
1文字のデータ
1重引用符( ' ' )で囲む
文字列データ
複数の文字データ
2重引用符( " " )で囲む
最後の要素にはNULL文字( '¥0' )が入る
※ 'H' と "H" とは違うことに注意
str str[0] str[1]
'H' '¥0'
' H ' は1個の文字データ
'H'
"H" は ' H ' と ' ¥0 ' からなる文字列
標準関数
標準関数
よく使う機能(処理)を他のプログラム(関数)から 利用できるように部品化(関数化)したもの
標準ライブラリ
複数の標準関数をひとつのファイルにまとめたもの
ヘッダファイル(拡張子 .h のファイル)
標準ライブラリとして用意された標準関数の定義を 記述したもの
標準関数を利用する際にはインクルードしておく 必要がある
printf()やscanf()などの 入出力関数の利用
stdio.hを
インクルード(#include)
文字・文字列処理に関する標準関数の例
文字・文字列処理ライブラリ関数
文字・文字列処理用の標準関数
ctype.h,string.hをインクルードする必要がある
文字・文字列処理ライブラリ関数の仕様
戻り値の型 関数名( 引数(の型) )
説明
int isalpha(char c) 文字 c がアルファベットであれば真
int isdigit(char c) 文字 c が数字文字であれば真
char toupper(char c) 小文字アルファベット c を大文字に
char tolower(char c) 大文字アルファベット c を小文字に
int strlen(char *str) 文字列 str の文字数
char *strcpy(char *str1, char *str2) 文字列 str1 に 文字列 str2 をコピー
char *strcat(char *str1, char *str2) 文字列 str1 の後ろに 文字列 str2 を連結 int strcmp(char *str1, char *str2) 文字列 str1 と 文字列 str2 の比較
同じであれば 0 が戻ってくる
標準関数を用いた文字列処理
アルファベット文字列をすべて大文字に変換(toupper)
#include <stdio.h>
#include <ctype.h>
int main(void) {
char str[6] = "HelLo";
int i;
i = 0;
while( str[i] != NULL ){
str[i] = toupper(str[i]);
i++;
}
printf("%s¥n", str);
return 0;
}
ctype.h をインクルード
1文字ずつ大文字に変換して上書き
(すでに大文字の場合は大文字のまま)
HELLO
標準関数を用いた文字列処理
二つの文字列を連結(strcat)
#include <stdio.h>
#include <string.h>
int main(void) {
char str1[11] = "Hello";
char str2[6] = "World";
strcat(str1, str2);
printf("%s¥n", str1);
return 0;
}
str1 の後ろに str2 を連結する
HelloWorld
string.h をインクルード
講義のまとめ
文字
1文字からなるchar型データ
文字をシングルクォート( ' )で囲む
出力や入力の際に使用する変換仕様は %c
文字には文字コードと呼ばれる値が割り当てられている
文字列
複数の文字からなるchar型配列データ
文字列をダブルクォート( " )で囲む
最後の文字の次の配列要素にNULL( '¥0' )が入る
出力や入力の際に使用する変換仕様は %s
文字列処理にはwhile文が用いられる