Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
基礎情報処理演習(12)文字と入出力
Search
自然言語処理研究室
December 06, 2013
Programming
7.9k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
基礎情報処理演習(12)文字と入出力
自然言語処理研究室
December 06, 2013
More Decks by 自然言語処理研究室
See All by 自然言語処理研究室
データサイエンス14_システム.pdf
jnlp
0
430
データサイエンス13_解析.pdf
jnlp
0
550
データサイエンス12_分類.pdf
jnlp
0
380
データサイエンス11_前処理.pdf
jnlp
0
510
Recurrent neural network based language model
jnlp
0
190
自然言語処理研究室 研究概要(2012年)
jnlp
0
170
自然言語処理研究室 研究概要(2013年)
jnlp
0
130
自然言語処理研究室 研究概要(2014年)
jnlp
0
160
自然言語処理研究室 研究概要(2015年)
jnlp
0
240
Other Decks in Programming
See All in Programming
The Good Stuff, Not the Slop: Engineering High-Quality Android Apps with Modern AI Tooling
danybony
1
260
海上で動くGoサーバー: goroutineとchannelでさばく航行データストリーム
atsuki_seo
0
940
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
290
iOS 27でニュースアプリはどう変わる!? 〜日経電子版の新機能対応と、開発事例から〜
lynnswap
6
13k
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
560
アクセシビリティから考える情報設計
high_g_engineer
0
410
仕様駆動開発による爆速プロダクト開発 / Bakusoku Spec Driven Development
kobakei
0
140
世界の中心で、AI(App Intents)をさけぶ ー App Intents中心設計の実践ガイド
touyou
0
680
Streamlitで実現する自然言語データアプリ開発
ayumu_yamaguchi
1
320
巨大モノリシックアプリ モダン化大作戦
ktcryomm
1
1.1k
Everything will be SERVERLESS — 信じて運用した10年の経験値 / Everything Will be Serverless — Lessons Learned from 10 Years of Operational Experience
seike460
PRO
1
520
IBM Bob Dojo #1 仕様駆動開発入門
oniak3ibm
PRO
0
270
Featured
See All Featured
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.4k
Done Done
chrislema
187
17k
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
1
420
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
680
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
2
290
Imperfection Machines: The Place of Print at Facebook
scottboms
270
14k
Prompt Engineering for Job Search
mfonobong
0
460
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
18k
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
550
Test your architecture with Archunit
thirion
2
2.4k
The Limits of Empathy - UXLibs8
cassininazir
1
690
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