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
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
自然言語処理研究室
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
420
データサイエンス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
WebRTC映像をAirPlayに対応させる挑戦.pdf
monolithic_adam
0
290
Vibes Containers 〜AIで変わるコンテナ設計と運用〜
tkikuc
3
550
海上で動くGoサーバー: goroutineとchannelでさばく航行データストリーム
atsuki_seo
0
730
フロントエンドUIフレームワークのこれまでとこれから
ssssota
5
2.8k
TiDB Cloudのカスタムコントローラーによるオートスケール対応
takaidohigasi
0
130
市販E-Readerを乗っ取れ 〜Embedded Swiftで電子ペーパーガジェットを制御する〜
trickart
0
190
AGENTS.md Is Not Enough:Build Skills, Don't Download Them
lx_t
0
120
世界の中心で、AI(App Intents)をさけぶ ー App Intents中心設計の実践ガイド
touyou
0
620
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
470
Snowflakeで業務アプリを作ろう。 Snowflakeのアプリ機能解説&実践ガイド
ayumu_yamaguchi
1
280
setup-vp GitLab対応の裏側
naokihaba
0
110
[GoCon2026] When Goroutines Are Not Enough: Runtime Locality in High-Throughput Go
takehaya
6
2.3k
Featured
See All Featured
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
30k
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
530
It's Worth the Effort
3n
188
29k
Agile that works and the tools we love
rasmusluckow
331
22k
HTML-Aware ERB: The Path to Reactive Rendering @ RubyCon 2026, Rimini, Italy
marcoroth
5
700
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8.3k
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
510
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
2
2.9k
Joys of Absence: A Defence of Solitary Play
codingconduct
1
520
Building Applications with DynamoDB
mza
96
7.2k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
232
55k
Un-Boring Meetings
codingconduct
0
420
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