授業中に作成したプログラムを片っ端から乗っけていきです。C++ を中心に掲載中。

6.1 配列とは

データ型とそれに適用される一組の操作を実現するためにメモリ上に配列することをデータ構造という。現実世界のデータを適切にモデル化すれば、コンピュータにおける処理は効率的になる。配列、スタック、連結リスト、・・・。
1)配列とアドレス
メモリ内に同じ型をもつデータを連結して割り当てる。
2)配列の表記法
型宣言 配列名[要素数];
各要素の参照方法
配列名[要素番号] ただし、要素番号:0〜要素数-1。
要素番号(添え字)は整定数または整変数。関数は付加。
要素番号が要素数を超えることを、(実行時には)コンパイラは発見できない。実行時の性能劣化を防ぐため、チェックはプログラマに任せた。
3)配列の初期化
実行前に1回だけ行える。実行時に行うことはない(記憶クラスは static 又は extern であるほうが効率がよい)。
static int a[4]={10,20,30,40} 又は static int a[]={10,20,30,40}
char P[]="ABC";
配列の大きさ以上の数の初期値を設定しようとするとコンパイルエラーになる。配列の大きさを宣言せずに、初期値の数だけ配列を取るようにすることもできる。ただし、プログラムの可能性の観点からは勧められない。
4)多次元配列
型宣言 配列名[要素数][要素数];
領域への割り付け
x[0][0], x[0][1], x[0][2], x[1][0], x[1][1], x[1][2]の順
static int x[2][3]={{10,20,30},{40,50,60}}
x[m][n]と宣言 ⇒ x[i][j]はx[0][0]から何番目となるか?
ポインタを使えば、x[i][j]=*(x+n*i+j)
C++では1次元配列の概念しかない。多次元配列は“配列”を要素とする配列として実現しているにすぎない。
「「"int"を要素とする大きさの2の配列」を要素とする大きさ3の配列」

6.2 文字列

1)文字配列
●文字を要素とし、終端を示すnull文字'\0'で終わる1次元char配列型。char*でアクセス
char str[6] = "Hello"; 又は = {'H','e','l','l','o','\0'}
char str[] = "Hello"; 又は = {'H','e','l','l','o','\0'}
char *str = "Hello"; 又は char *str; str = "Hello";
strをポインタとして定義し、スタック領域に割り当てられた文字配列を参照する。
文字は1Bであり、' '(Single Quotation)で囲まれる。
'\0'が現れるまでが文字配列として認識される。文字配列は、先頭の文字のみを'\0'とすればクリアできる。
char str[4]; … memset(str, '\0', sizeof(str));
文字列操作には、標準ライブラリを利用せねばならず、不便。
char str[6]; str = "Hello"; ポインタ同士の処理と見なされ、コンパイルエラー。
●入力
文字配列から一文字ずつ読む cin.get()
char c;
while(cin.get(c)){
	cout.put(c);
}
文字配列から一行ずつ読む cin.getline()
char c[100];
while (!cin.eof()){
	cin.getline(c, sizeof(c));
	cout << c << '\n';
}
2)文字配列
●stringクラスのオブジェクト、文字列の長さ情報はオブジェクトに含まれ、Null文字を使用せず。
ヘッダ:<string>が必要
string s1; // オブジェクトs1が定義され、零個の文字を含んでいる。
string s2 = "New York"; // オブジェクトs2は8個の文字を含む。
string s3(60,'*'); // オブジェクトs3は60個のアスタリスクを含む。
string s4 = s3; // オブジェクトs4は60個のアスタリスクを含む。
string s5(s2,4,2); // オブジェクトs5は2文字"Yo"を含む。
データ型となり、文字列操作は容易になり、安全性(配列境界をはみ出さない)を確保できる。
	=, +, +=, ==, !=, <, <=, >, >=, [], <<, >>
●入力
cin >> s; 空白文字は読まない。
getline(cin,s)
cin >> s;
cout << s << '\0';
getline(cin,s) 開業までの文字列を読み込む関数。区切り子も含めて読み込む。
srting s;
getline(cin,s);
cout << s << '\0';
●文字オブジェクトを文字配列に変換することができる。
const char *cs = s.c_str(); // stringオブジェクトsを文字配列csに変換する。
c_str()関数はconst char*型をもつ<string>クラスの関数。

6.3 書式付入力(Formatted Inputs)

抽出演算子(extraction Inputs,又は入力演算子)>>は、istreamオブジェクトから文字を抽出し、それらの文字に対応する値をオブジェクトに複写する。入力された文字から対応する値を形成するこの過程をフォーマットという。
コード
	int n;
	cin >> n;
は、入力□□□□12
をどのように処理しているか。入力は、7つの文字,,,,'1','2','\n'を含んでいる。

!!!追記予定!!!

オブジェクトnには、整数12が入る。空白文字はすべて無視される。

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Creative Commons

Creative Commons License
この作品は、クリエイティブ・コモンズ・ライセンスの下でライセンスされています。

メンバーのみ編集できます