Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
基礎情報処理演習(12)文字と入出力
Search
自然言語処理研究室
December 06, 2013
Programming
0
7.8k
基礎情報処理演習(12)文字と入出力
自然言語処理研究室
December 06, 2013
Tweet
Share
More Decks by 自然言語処理研究室
See All by 自然言語処理研究室
データサイエンス14_システム.pdf
jnlp
0
350
データサイエンス13_解析.pdf
jnlp
0
410
データサイエンス12_分類.pdf
jnlp
0
310
データサイエンス11_前処理.pdf
jnlp
0
430
Recurrent neural network based language model
jnlp
0
110
自然言語処理研究室 研究概要(2012年)
jnlp
0
110
自然言語処理研究室 研究概要(2013年)
jnlp
0
76
自然言語処理研究室 研究概要(2014年)
jnlp
0
89
自然言語処理研究室 研究概要(2015年)
jnlp
0
140
Other Decks in Programming
See All in Programming
初めてDefinitelyTypedにPRを出した話
syumai
0
420
A Journey of Contribution and Collaboration in Open Source
ivargrimstad
0
1k
NSOutlineView何もわからん:( 前編 / I Don't Understand About NSOutlineView :( Pt. 1
usagimaru
0
340
RubyLSPのマルチバイト文字対応
notfounds
0
120
Duckdb-Wasmでローカルダッシュボードを作ってみた
nkforwork
0
130
Nurturing OpenJDK distribution: Eclipse Temurin Success History and plan
ivargrimstad
0
1k
Contemporary Test Cases
maaretp
0
140
よくできたテンプレート言語として TypeScript + JSX を利用する試み / Using TypeScript + JSX outside of Web Frontend #TSKaigiKansai
izumin5210
6
1.8k
What’s New in Compose Multiplatform - A Live Tour (droidcon London 2024)
zsmb
1
480
Micro Frontends Unmasked Opportunities, Challenges, Alternatives
manfredsteyer
PRO
0
110
3 Effective Rules for Using Signals in Angular
manfredsteyer
PRO
1
100
EMになってからチームの成果を最大化するために取り組んだこと/ Maximize team performance as EM
nashiusagi
0
100
Featured
See All Featured
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
329
21k
Rebuilding a faster, lazier Slack
samanthasiow
79
8.7k
Embracing the Ebb and Flow
colly
84
4.5k
How to Ace a Technical Interview
jacobian
276
23k
Imperfection Machines: The Place of Print at Facebook
scottboms
265
13k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
364
24k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
42
9.2k
Become a Pro
speakerdeck
PRO
25
5k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.3k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
356
29k
Designing for Performance
lara
604
68k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
44
6.8k
Transcript
基礎情報処理演習 (12) 文字と入出力 山本和英 長岡技術科学大学 1
文字と文字列 2
文字は数字である すべての文字には番号(文字コード)が割り当 てられていて、その番号(つまり数字)を使って 処理する。 c = 'A'; 文字Aの文字コード(65)を代入する。つまり、 c=65; と書いても同じ意味になる。
3
http://e-words.jp/p/r-ascii.html
char:文字のための変数型 文字(正確には1バイト文字)の種類は256個しかな い。つまり文字コードは 0~255しかない。 よってint型を使っても処理できるが、int型ほど大き な「箱」は不要なので、通常は文字専用のchar型 を使う。 char moji =
'Q'; 5
文字と文字列 文字を集めたものを文字列と呼ぶ。 文字は 'k' のようにシングルクオートで、 文字列は”string”のようにダブルクオートで 表現する。 文字列は文字の配列 文字の記憶には変数を、文字列の記憶には配列 を使う。
6
配列を作成方法は普通の配列と同じ。 char ss[10]; 配列への代入はstrcopy関数を使う。 strcopy (ss, “abcde”); ただし配列宣言時のみ下記のように書ける。 char ss[10]
= “abcde”; 7
文字列はどう保存されているか char word[] = ”stop”; と宣言すると、実は下記のように保存される。 word[0] = 's'; word[1]
= 't'; word[2] = 'o'; word[3] = 'p'; word[4] = 0; よって char p[10] と宣言すると9文字しか保存できな い。 8 すべての文字列の最後に自動的 に付加され、文字列の最後尾を 意味する。つまり「ここで終わり」 印。0 は \0 と書くこともある。
キーボード入力と ディスプレイ出力 (コンソール入出力) 9
文字と文字列の入出力 文字の入出力には %c を使う。 scanf_s (“%c”, &ch); printf (“%c”, ch);
文字列の入出力には %s を使う。 scanf_s (“%s”, ss); printf (“%s\n”, ss); ただし、文字列のscanf_sは空白を入力できないので、 後述するgetcharやgets_sがおすすめ。 10
キーボードからの1文字入力 1文字入力するだけならgetchar関数が簡単。 ch = getchar(); これによってキーボード入力した1文字(の文字コー ド)が変数chに代入される。 注意:getcharを使う時はchar型ではなくint型 変数で受け取ることが推奨されている。 11
キーボードからの1文字出力 getchar関数に対応するputchar関数がある。 putchar(ch); 例えば、改行するだけならこう書く。 putchar('\n'); 1回のputcharで出力できるのは1文字のみ。2文 字以上同時に出力する時はprintfを使う。 12 変数chの数値に対応する コードの文字が出力される
文字の連続入力のパターン 1文字ずつ連続入力する時は通常こう書く。 while ((ch = getchar()) != EOF) { /*
表示の例 */ printf (“%c”, ch); } EOFとはEnd of Fileの略で、入力の終了を意味す る。 Windowsでは、Ctrl-Zを押すとEOFの意味にな り、この繰り返しが終了する。 13
キーボードからの文字列入力 文字列の入力には、gets_s関数を使う。 gets_s(ss, sizeof(ss)); このように書くと、Enter が押されるまでの文字列 が配列ssに代入される(配列ssは事前に十分な 長さで宣言しておく) 当たり前だが、(配列の要素数-1)より長い文字列 を入力してはいけない。
※sizeof() … 配列の要素数を返す関数 14
キーボードからの文字列出力 gets_s関数の反対はputs関数。 puts(ss); これも、printf を使って書いても構わないが、 putsの場合は自動的に最後に改行を入れるところ が違う(printfは明示しない限り改行しない)。 15
行の連続入力のパターン 文字単位入力の時と同様に、1行ずつ入力する時はこう 書くのが定番パターン。 while (gets_s(ss, sizeof(ss)) != NULL) { /*
表示の例 */ printf (“%s\n”, ss); } 16 文字の時のEOFがNULLになっている ところが違っているので注意。 Ctrl-Z で終了なのは同じ。
ファイル入出力 17
ファイルからの入出力手順 1. ファイルのオープン ファイルから読み込む(あるいは書きこむ)準 備をすること 2. ファイルへの読み書き コンソールへの入出力と同様に書く。ただし、 どのファイルに書き込むかを指定するので、 書式がちょっと違う。
3. ファイルのクローズ 必要な後処理を行う。 18
オープンとクローズ #include <stdlib.h> // exit()に必要 FILE *fp; if ((fp =
fopen(“file.txt”, “r”)) == NULL) { printf (“オープンできない!\n”); exit(1); } /* ここにやりたい作業を書く */ fclose(fp); 19
ファイルポインタ ファイルはファイルポインタという特殊なポインタを 使って読み書きする。ファイルポインタは他の変数と 同様に、関数冒頭で宣言しておく。 FILE *fp1, *fp2; ファイルポインタは、今ファイルのどこを読んでいるのか、 あるいはファイルのどこに書き込んでいるのか、といったファ イルの場所を覚えているのが仕事。
20
ファイルの読み込み fin = fopen(“file1.txt”, “r”); ファイルの書き込み(新規作成される) fout = fopen(“file2.txt”, “w”);
既存のファイルへの加筆(末尾に追加) fadd = fopen(“file3.txt”, “a”); 21
ファイルへ1文字の読み書き 1文字入力にはfgetcを、1文字出力にはfputc を使う。 ch = fgetc(fp); fputc(ch, fp); それぞれ、コンソール入出力でのgetcharと putchar
に対応する。 22 ch:文字変数 fp:ファイルポインタ
ファイルへ1行の読み書き 1行入力にはfgetsを、1行出力にはfputsを使 う。 fgets(ss, 256, fp); fputs(ss, fp); それぞれ、コンソール入出力でのgets_sとputs に対応する。fgetsの256は最大文字数を表す
(いつも256にしておけば十分)。 23 ss:文字型配列 fp:ファイルポインタ
この他、fprintfやfscanf_sという関数もある。 …の書き方はprintf, scanf_sと全く同じ。 fprintf(fp, …); fscanf_s(fp, …); (おまけ) 実は内部でこんなふうに書き換えられている。 printf(…);
⇒ fprintf(STDOUT, …); scanf_s(…); ⇒ fscanf_s(STDIN, …); STDINやSTDOUTはコンソールを意味する特殊なファイルポインタ で、stdio.hで定義されている。 24