文字列
Cにおける文字とは?
Cでは文字は番号(文字sコードによって表現)
charでは文字コードを格納している(ASCIIとか、Unicodeとか)
文字コードは後方互換が必要
人は文字コードを覚えなくてもいいchar moji='A';ではmojiにはAの文字コード65が格納される
文字列については?
Cでは文字列を表す方が存在しないため、char型配列で扱う
(例えばJavaにはStringクラスがある)
文字列の終わりは\0によって表現
\0は一文字扱いのNULL文字
エスケープ文字
\n→改行\"→”\\→\\0→NULL文字
#define SIZE 5
char filename[SIZE];とした場合、終端文字が必要なので長さ4以下の文字までしか扱えない
''と""の違い文字は
''文字列の先頭アドレスは
""で表現する
'a'と"a"では帰ってくるものが異なる
printf("%d\n",65) /*整数値として表示*/
printf("%c\n",65) /*文字コードとして解釈*/
printf("%d\n",'A') /*整数値として表示*/
printf("%c\n",'A') /*文字コードとして解釈*/文字列操作のライブラリ
#include<string.h>
char *strcpy(char *dst, const char *src);
/*文字列srcをdstにコピー*/
size_t strlen(const char *s)
/*NULL文字を含まない文字列の長さを返す*/
int strcmp(const char *s1, const char *2)
/*辞書順で比較してs1<s2なら負、s1==s2で0、s1>s2で正の値を返す*/src: source
dst: destination
size_tはだいたいunsigned intであると考えてよいらしい(符号なし整数)
文字列の途中に\0を入れることで母児列を分割できる
データ構造
- スタック
- キュー
- デク
同種のデータを複数保持するデータ構造
スタック
- データを積み上げて保存するイメージ
- 格納も取得も一番上に対してのみ行える
- Last-In-First-Out(LIFO)
- push,pop
キュー
- データを待ち行列で保存するイメージ
- 格納はtail、取得はheadに対してのみ行うことが可能
- enqueue
- dequeue
デク
- キューとスタックの特性を併せ持つデータ構造
- キューの先頭と末尾それぞれで格納と取得が可能
この辺の概念を具体的なプログラミング言語で実現(実装)
いろいろな仮定、エラー処理が必要になる
- 空のスタックからpop
- 満杯のキューにenqueue
など
スタックの実装
- Cで実装
- データ保持には配列を利用
- 常にtopが必要なので構造体を用いて参照しやすくする
struct stack{
int top;
elemtype elem[SIZE];
}配列の0をボトム、topは変数で管理する
void push(struct stack *s, elemtype val){
s -> top++;
s -> elem[s->top]=val;
}elemtype pop(struct stack *s){
elemtype val;
val=s->elem[s->top];
s->top--;
return val;
}理論通りではかなり短く書けるが、エラーに対処できるようにすると長くなる
文字列とポインタ