Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥
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
400
データサイエンス13_解析.pdf
jnlp
0
510
データサイエンス12_分類.pdf
jnlp
0
360
データサイエンス11_前処理.pdf
jnlp
0
480
Recurrent neural network based language model
jnlp
0
140
自然言語処理研究室 研究概要(2012年)
jnlp
0
150
自然言語処理研究室 研究概要(2013年)
jnlp
0
110
自然言語処理研究室 研究概要(2014年)
jnlp
0
130
自然言語処理研究室 研究概要(2015年)
jnlp
0
210
Other Decks in Programming
See All in Programming
メルカリのリーダビリティチームが取り組む、AI時代のスケーラブルな品質文化
cloverrose
2
390
PC-6001でPSG曲を鳴らすまでを全部NetBSD上の Makefile に押し込んでみた / osc2025hiroshima
tsutsui
0
190
HTTPプロトコル正しく理解していますか? 〜かわいい猫と共に学ぼう。ฅ^•ω•^ฅ ニャ〜
hekuchan
2
480
これならできる!個人開発のすゝめ
tinykitten
PRO
0
130
認証・認可の基本を学ぼう後編
kouyuume
0
250
Combinatorial Interview Problems with Backtracking Solutions - From Imperative Procedural Programming to Declarative Functional Programming - Part 2
philipschwarz
PRO
0
120
Deno Tunnel を使ってみた話
kamekyame
0
260
從冷知識到漏洞,你不懂的 Web,駭客懂 - Huli @ WebConf Taiwan 2025
aszx87410
2
3.1k
ゲームの物理 剛体編
fadis
0
380
Jetpack XR SDKから紐解くAndroid XR開発と技術選定のヒント / about-androidxr-and-jetpack-xr-sdk
drumath2237
1
190
Grafana:建立系統全知視角的捷徑
blueswen
0
230
AIエンジニアリングのご紹介 / Introduction to AI Engineering
rkaga
8
3.4k
Featured
See All Featured
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
0
340
The agentic SEO stack - context over prompts
schlessera
0
560
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
61
44k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
3.3k
The Power of CSS Pseudo Elements
geoffreycrofte
80
6.1k
RailsConf 2023
tenderlove
30
1.3k
Thoughts on Productivity
jonyablonski
73
5k
Why You Should Never Use an ORM
jnunemaker
PRO
61
9.7k
Fireside Chat
paigeccino
41
3.8k
Getting science done with accelerated Python computing platforms
jacobtomlinson
0
79
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
0
1.8k
Producing Creativity
orderedlist
PRO
348
40k
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