プログラミング 4 文字列.

Slides:



Advertisements
Similar presentations
第 2 章 数値の入力と変数 scanf と変数をやります 第 2 章 数値の入力と変数 1. 以下のプログラムを実行してみよう  C 言語では文の最後に「 ; 」(セミコロン)が付きます 第 2 章 数値の入力と変数 2 #include int main() { int x; x = 3; printf("x.
Advertisements

オブジェクト指向言語・ オブジェクト指向言語演習 中間試験回答例. Jan. 12, 2005 情報処理技術基礎演習 II 2 オブジェクト指向言語 中間試験解説 1  (1) 円柱の体積(円柱の体積 = 底面の円の面積 x 高さ) を求めるプログラムを作成しなさい。ただし、出力結果は、入 力した底面の円の半径.
復習 配列変数の要素 5は配列の要素数 これらの変数をそれぞれ配列の要素と呼ぶ この数字を配列の添え字,またはインデックスと呼ぶ
復習 配列変数の要素 5は配列の要素数 これらの変数をそれぞれ配列の要素と呼ぶ この数字を配列の添え字,またはインデックスと呼ぶ
情報・知能工学系 山本一公 プログラミング演習Ⅱ 第3回 配列(1) 情報・知能工学系 山本一公
プログラミング演習II 2004年11月 30日(第6回) 理学部数学科・木村巌.
15.1 文字列処理の基本 15.2 文字列処理用ライブラリ関数
情報基礎演習B 後半第5回 担当 岩村 TA 谷本君.
数理情報工学演習第一C プログラミング演習 (第3回 ) 2014/04/21
第2章 数値の入力と変数 scanfと変数をやります.
データ構造とアルゴリズム 第10回 mallocとfree
プログラミング入門2 第10回 構造体 情報工学科 篠埜 功.
プログラミング入門2 第10回 構造体 情報工学科 篠埜 功.
システムプログラミング 第5回 情報工学科 篠埜 功 ヒアドキュメント レポート課題 main関数の引数 usageメッセージ
基礎プログラミングおよび演習 第9回
岩村雅一 知能情報工学演習I 第9回(C言語第3回) 岩村雅一
文字配列の課題1 解説 /* a */ #include <stdio.h> main( ) { int i;
12: コマンドライン引数 C プログラミング入門 総機1 (月1) Linux にログインし、以下の講義ページ を開いておくこと
12: コマンドライン引数 C プログラミング入門 基幹7 (水5) Linux にログインし、以下の講義ページ を開いておくこと
第8回 プログラミングⅡ 第8回
理由:文字数より要素数の多い配列を用いた時に,文字列の最後を示すため
理由:文字数より要素数の多い配列を用いた時に,文字列の最後を示すため
第6章 2重ループ&配列 2重ループと配列をやります.
構造体.
プログラミング演習Ⅰ 課題2 10進数と2進数 2回目.
精密工学科プログラミング基礎 第9回資料 (12/11 実施)
ファイル操作と文字列の利用.
ちょっとした練習問題① 配列iroを['R', 'W', 'R', 'R', 'W' , 'W' , 'W']を宣言して、「W」のときの配列の番号をprintfで表示するようなプログラムを記述しなさい。
プログラミング応用 printfと変数.
プログラミング論 II 2008年10月30日 文字列
プログラミング 4 記憶の割り付け.
プログラミング序論 2. n人のインディアン.
第10章 これはかなり大変な事項!! ~ポインタ~
岩村雅一 知能情報工学演習I 第9回(後半第3回) 岩村雅一
プログラミング入門2 第11回 情報工学科 篠埜 功.
前回の練習問題.
第13章 文字の取り扱い方 13.1 文字と文字型変数 13.2 文字列 13.3 文字型配列への文字列の代入
第13章 文字の取り扱い方 13.1 文字と文字型関数 13.2 文字列 13.3 文字型配列への文字列の代入
プログラミング入門2 第11回 情報工学科 篠埜 功.
第7回 プログラミングⅡ 第7回
地域情報学 C言語プログラミング 第5回 ポインタ、関数、ファイル入出力 2017年11月17日
第11回 プログラミングⅡ 第11回
09: ポインタ・文字列 C プログラミング入門 総機1 (月1) Linux にログインし、以下の講義ページ を開いておくこと
プログラミング基礎B 文字列の扱い.
岩村雅一 知能情報工学演習I 第9回(後半第3回) 岩村雅一
精密工学科プログラミング基礎Ⅱ 第4回資料 今回の授業で習得してほしいこと: 文字列の扱い ファイル入出力の方法 コマンドライン引数の使い方
岩村雅一 知能情報工学演習I 第9回(C言語第3回) 岩村雅一
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
プログラミング言語論 第六回 理工学部 情報システム工学科 新田直也.
C言語 はじめに 2016年 吉田研究室.
岩村雅一 知能情報工学演習I 第9回(後半第3回) 岩村雅一
プログラミング基礎a 第6回 C言語によるプログラミング入門 配列と文字列(その2)
15.1 文字列処理の基本 15.2 文字列処理用ライブラリ関数
プログラミング 3 2 次元配列.
第13章 文字の取り扱い方 13.1 文字と文字型変数 13.2 文字列 13.3 文字型配列への文字列の代入
09: ポインタ・文字列 C プログラミング入門 基幹7 (水5) Linux にログインし、以下の講義ページを開いておく こと
12: コマンドライン引数 C プログラミング入門 基幹7 (水5) Linux にログインし、以下の講義ページを開いておく こと
ネットワーク・プログラミング Cプログラミングの基礎.
情報処理Ⅱ 第7回 2004年11月16日(火).
プログラミング論 文字列
コンパイラ 2012年10月11日
プログラミング演習II 2004年11月 16日(第5回) 理学部数学科・木村巌.
15.1 文字列処理の基本 15.2 文字列処理用ライブラリ関数
プログラミング基礎a 第5回 C言語によるプログラミング入門 配列と文字列
プログラミング入門2 第5回 配列 変数宣言、初期化について
第2章 数値の入力と変数 scanfと変数をやります.
岩村雅一 知能情報工学演習I 第7回(後半第1回) 岩村雅一
プログラミング 3 ポインタ(1).
12: コマンドライン引数 C プログラミング入門 基幹2 (月4) Linux にログインし、以下の講義ページ を開いておくこと
岩村雅一 知能情報工学演習I 第9回(C言語第3回) 岩村雅一
Presentation transcript:

プログラミング 4 文字列

C 言語での文字の表現 「1 文字」を表すのに char 型を使う 文字の定数は「'」(単一引用符)でくくって表す 実体は整数を表す型で,文字に振られた番号(文字コード) を保持する 定義は「char c;」のように行える 文字の定数は「'」(単一引用符)でくくって表す たとえば char 型の変数 c に「a」を代入:c = 'a'; 文字列(「"」でくくって表す)と間違えないように 当面,文字・文字列は半角文字を扱う 全角文字の扱いは複雑な点があるので

文字列の表現(1) C 言語では,文字列は「文字の配列(char の配 列)」で表現する char の配列 s[] に「Hello」という文字列を記憶させ る s[0] は ‘H’,s[1] は ‘e’,……,s[4] は ‘o’ s[5](最後の文字の次の要素)に ‘\0’ が入る 文字列の表現では,少なくとも「文字数+1」の要素数が必 要 ‘\0’ 以降の要素は使われない s[0] s[1] s[2] s[3] s[4] s[5] H e l o \0

文字列の表現(2) char の配列の初期化 初期化のとき以外,文字列の一括代入はできない 配列の初期化なので char s[] = { ‘H’, ‘e’, ‘l’, ‘l’, ‘o’, ‘\0’ }; char の配列に限り文字列定数で初期化できる char s[] = “Hello”; 初期化のとき以外,文字列の一括代入はできない char s[10]; s = “Hello”; ←できない

文字列の入出力 scanf() 関数 printf() 関数 変換文字列「%s」を使う 文字列を収めたい char の配列の名前を渡す char s[1024]; scanf(“%s”, s); ここで,確保した要素数より多い文字を入力してはいけない (バッファオーバランになる) printf() 関数 ‘\0’ までを出力する 出力したい文字列を収めた char の配列の名前を渡す printf(“%s\n”, s);

文字列の操作(1) 文字列の操作では,終端に ‘\0’ が入っていることを 使うものが多い 次のような形式が頻繁に現れる for (i = 0; s[i] != ‘\0’; i++) { … } while (s[i] != ‘\0’) { … }

文字列の操作(2):文字数 ‘\0’ が現れるまでに何個の要素があったかを数えれ ばよい int myStrlen(char s[]) { int i; for (i = 0; s[i] != ‘\0’; i++) ; return i; } 「’\0’ が入っていた要素番号」が文字数と一致する s[0] s[1] s[2] s[3] s[4] s[5] H e l o \0

文字列の操作(3):コピー 文字列どうしは = 演算子でコピーできない 文字列は配列:配列のコピー(’\0’ で終端) void myStrcpy(char dst[], char src[]) { int i; for (i = 0; src[i] != ‘\0’; i++) { dst[i] = src[i]; } dst[i] = ‘\0’; /* 最後の ‘\0’ をコピー */ return; } バッファオーバランに注意

文字列の操作(4):比較 文字列どうしは == で比較できない 「s == t」は「配列の先頭アドレスの比較」になる 1 文字ずつ,’\0’ に達するまで比較する int myStreql(char s[], char t[]) { int i; for (i = 0; s[i] == t[i]; i++) { if (s[i] == ‘\0’) return 1; } return 0; }

文字列の操作(5):整数に変換 数字の文字コードは ‘0’~’9’ でつながっている:文字 c が「数字の文字」であるとき,「c – ‘0’」で 0~9 の数値に変換できる char 型の実体は文字コードであることに注意;整数なので演 算もできる 正の整数として解釈できる文字列を整数に変換 int myAtoi(char s[]) { int x = 0, i; for (i = 0; s[i] != ‘\0’; i++) { x = x * 10 + (s[i] – ‘0’); } return x; }

文字列に関する関数(1) #include <string.h> で使える strlen(s):s[] の文字数をカウント strcpy(s, t):t[] から s[] に文字列をコピー strcmp(s, t):s[] と s[] を比較;一致すると 0 を返す strcat(s, t):s[] に t[] を連結 #include <stdlib.h> で使える atoi(s):s[] が整数とみなせるときに整数に変換