第8回資料 - 湘南工科大学 情報工学科 ホームページ

2011年11月29日
湘南工科大学
情報理論2
第8回
小林 学
〒251-8511 神奈川県藤沢市辻堂西海岸1-1-25
Tel.
0466-30-0232(直通)
Fax.
0466-34-5932
[email protected]
文字列
Page 2
#include<stdio.h>
void main(void){
char str[5]=“abaa”;//文字配列の定義
//文字配列の初期化
printf(“%s”, str);
//文字列の表示
}
[0] [1] [2] [3] [4]
配列 str
‘a’ ‘b’ ‘a’ ‘a’
0
文字列の最後には数字の 0 が入る (0 がないとだめ)
0 が文字列の終わりを表す
文字’a’を数える(カウント)
i
str[i]
0
1
2
3
4
‘a’
‘b’
‘a’
‘a’
0
初期値:
繰り返し:
(for文)
count
0
0→1
1
1→2
2→3
3
Page 3
if(str[i]=='a')
count++;
[前回の課題1]上の文字’a’を数えるプログラムを作成し
なさい
実行結果
[前回の課題1解答]文字’a’のカウント
#include<stdio.h>
void main(void){
char str[5]="abaa";
int
i, count;
}
Page 4
//文字列の定義
count = 0;
for(i=0;i<5;i++){
if(str[i]=='a') count++;
}
printf("str中の'a'の数:%d\n", count);
一致文字のカウント
Page 5
char str1[5]="abba", str2[5]="aabb";
i
str1[i] str2[i]
0
初期値:
繰り返し:
(for文)
count
0
1
2
3
‘a’
‘b’
‘b’
‘a’
‘a’
‘a’
‘b’
‘b’
0→1
1
1→2
2
[前回の課題2]上の一致文字を数えるプログラムを作成
しなさい
実行結果
[前回の課題2解答]一致文字のカウント
#include<stdio.h>
void main(void){
char str1[5]="abaa", str2[5]="aaab";
int i, count = 0;
}
for(i=0;i<4;i++){
if(str1[i]==str2[i]) count++;
}
printf("一致した文字の数:%d\n",count);
Page 6
先頭からの一致文字数
Page 7
char str1[5]="abba", str2[5]="abaa";
i
str1[i] str2[i]
0
初期値:
繰り返し:
(for文)
count
0
1
2
3
‘a’
‘b’
‘b’
‘a’
1
‘b’
2
‘a’ break(繰り返しを抜ける)
if(str1[i]!=str2[i]) break;
[課題1]先頭からの一致文字を数えるプログラムを作成
しなさい
実行結果
Page 8
途中からの一致文字数
char str1[10]="ababbaaba";
char str2[10]="bbababbab";
str1の1番からとstr2の3番からの一致文字数を求める
i
str1[1+i] str2[3+i]
初期値:
繰り返し:
(for文)
0
1
2
3
4
5
‘b’
‘a’
‘b’
‘b’
‘a’
‘a’
‘b’
‘a’
‘b’
‘b’
‘a’
‘b’
count
0
1
2
3
4
5
break
途中からの一致文字数
Page 9
[課題2]前ページの途中からの一致文字を数えるプログ
ラムを作成しなさい
実行結果
Page 10
課題3
char str1[10]="ababaaaba";
char str2[4]="aba";
str1の中にstr2と完全一致する文字列は何回入ってい
るか?またその一致する先頭の位置は?
位置:0 1 2 3 4 5 6 7 8
ababaaaba
一致した先頭位置:0,2,6
一致回数:3回
[課題3]上のプログラムを作成しなさい