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
380
データサイエンス13_解析.pdf
jnlp
0
490
データサイエンス12_分類.pdf
jnlp
0
340
データサイエンス11_前処理.pdf
jnlp
0
460
Recurrent neural network based language model
jnlp
0
140
自然言語処理研究室 研究概要(2012年)
jnlp
0
130
自然言語処理研究室 研究概要(2013年)
jnlp
0
98
自然言語処理研究室 研究概要(2014年)
jnlp
0
120
自然言語処理研究室 研究概要(2015年)
jnlp
0
190
Other Decks in Programming
See All in Programming
AIを活用し、今後に備えるための技術知識 / Basic Knowledge to Utilize AI
kishida
22
5.9k
Design Foundational Data Engineering Observability
sucitw
3
210
How Android Uses Data Structures Behind The Scenes
l2hyunwoo
0
480
テストカバレッジ100%を10年続けて得られた学びと品質
mottyzzz
2
610
チームのテスト力を鍛える
goyoki
3
930
「手軽で便利」に潜む罠。 Popover API を WCAG 2.2の視点で安全に使うには
taitotnk
0
870
MCPとデザインシステムに立脚したデザインと実装の融合
yukukotani
4
1.5k
Compose Multiplatform × AI で作る、次世代アプリ開発支援ツールの設計と実装
thagikura
0
170
実用的なGOCACHEPROG実装をするために / golang.tokyo #40
mazrean
1
300
CloudflareのChat Agent Starter Kitで簡単!AIチャットボット構築
syumai
2
510
個人開発で徳島大学生60%以上の心を掴んだアプリ、そして手放した話
akidon0000
1
150
Android 16 × Jetpack Composeで縦書きテキストエディタを作ろう / Vertical Text Editor with Compose on Android 16
cc4966
2
270
Featured
See All Featured
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Build your cross-platform service in a week with App Engine
jlugia
231
18k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
23
1.4k
Build The Right Thing And Hit Your Dates
maggiecrowley
37
2.9k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
127
53k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
8
930
Designing Experiences People Love
moore
142
24k
The Straight Up "How To Draw Better" Workshop
denniskardys
236
140k
Stop Working from a Prison Cell
hatefulcrawdad
271
21k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.4k
Making the Leap to Tech Lead
cromwellryan
135
9.5k
Building Flexible Design Systems
yeseniaperezcruz
329
39k
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