# 本番試験レベル問題2(文字列) ※メンバー共有用
## 問題
入力として、1行目に文字列L1の大きさ、2行目に文字列L1、3行目に文字列L2の大きさ、4行目に文字列L2が与えられる。
L1の大きさ(1行目の値)がL2の大きさ(3行目の値)以上のとき、L1の中にL2がいくつ含まれているか出力せよ。また、L2の大きさがL1の大きさよりも大きいとき、L2の中にL1がいくつ含まれているか出力せよ。
ただし、文字列内の値を参照するときはポインタを使うこと。
※例えば、文字列L1の値が"future"で、それをポインタplに渡したとき、文字列の最後の文字'e'を参照する時には、*(pl+5)のように書かなくてはならない
### 入力1
```
4
abcd
2
cd
```
### 出力1
```
1
```
### 入力2
```
3
fun
9
funfanfun
```
### 出力2
```
2
```
### 入力3
```
4
ABab
2
ab
```
### 出力3
```
1
```
## 解説
### 全体の流れ

### 手順
#### 1.キーボードから入力を読み込む
- 文字列L1の大きさを読み込むint型変数aを宣言
- 文字列L1の大きさをscanfで読み取る
- 大きさaの文字列L1を読み込むchar型配列L1を宣言
- scanfを行い、L1の値を読み取る
- 文字列L2の大きさを読み込むint型変数bを宣言
- 文字列L2の大きさをscanfで読み取る
- 大きさbの文字列L2を読み込むchar型配列L2を宣言
- scanfを行い、L2の値を読み取る
#### 2.a, bを適切な変数に代入する・L1, L2を適切なポインタに渡す
- int型変数lva, svaを宣言する
- char型ポインタ変数pl, psを宣言する
- 適切な変数に値を渡す
- (b<=a)のときの処理
- ポインタ変数plにL1を渡す
- ポインタ変数psにL2を渡す
- 変数lvaにaの値を渡す
- 変数svaにbの値を渡す
- (b<=a)以外のときの処理
- ポインタ変数plにL2を渡す
- ポインタ変数psにL1を渡す
- 変数lvaにbの値を渡す
- 変数svaにaの値を渡す
#### 3.plの中にpsがいくつ含まれているか出力する
- ポインタ変数pl内のpsの個数を渡すint型変数ansを宣言する
- ポインタ変数plを0字目から(lva-sva)字目までfor文で繰り返す
- 上記のfor文の中(二重for文)で、ポインタ変数psを0字目からsva字目までfor文で繰り返す
- 現在参照しているplとpsの値が一致していないとき
- 内側のfor文を終了する
- 現在参照しているplとpsの値が一致しているとき
- 内側のfor文を続ける
- psの最後の文字まで一致したとき、ansを1増やす
- ansを出力する
## 解答
```
#include <stdio.h>
int main(void) {
//文字列L1の大きさを入れる変数
int a;
//文字列L1の大きさを読み取る
scanf("%d", &a);
//文字列L1の値を入れる変数
char L1[a];
//文字列L1の値を読み取る
scanf("%s", L1);
//文字列L2の大きさを入れる変数
int b;
//文字列L2の大きさを読み取る
scanf("%d", &b);
//文字列L2の値を入れる変数
char L2[b];
//文字列L1の値を読み取る
scanf("%s", L2);
/*a,bのうち、大きい方をlva,
小さい方をsvaに代入する*/
int lva, sva;
/*L1,L2のうち、大きい方をpl,
小さい方をpsに代入する*/
char *pl, *ps;
if(b <= a){
/*L1の方がL2以上のとき*/
pl = L1;
ps = L2;
lva = a;
sva = b;
}else{
/*L2の方が大きい時*/
pl = L2;
ps = L1;
lva = b;
sva = a;
}
//含まれていた回数を代入する変数
int ans = 0;
for (int i = 0; i < lva-sva+1; i++) {
/*plを1字ずつ進める. lva-sva+1以降は,
plの残りの字数がsva字よりすくなくなるため必要ない*/
for (int j = 0; j < sva; j++) {
/*psを1字ずつ進める*/
if (*(pl+i+j) != *(ps+j)) {
/*現在指しているplとpsの値が違うとき
jのfor文を終了し,iのfor文に戻る*/
break;
}
if (j == sva-1) {
/*現在指しているplの値とpsの値が最後まで同じ*/
ans += 1;
}
}
}
//ansの出力
printf("%d\n", ans);
return 0;
}
```