문제 설명
20글자 이하의 문자열이 입력되어 s1 배열에 저장되고 5글자 이하의 문자열이 입력되어 s2 배열에 저장된다.
문자열 s1에서 s2와 같은 패턴의 문자열이 몇개가 존재하는지 개수를 인쇄하라
만약 s1이 abababac 이고 s2가 aba일 경우 총 3번 aba 패턴이 존재하므로 답은 3이 된다.
아래 코드를 사용하되 변수, 함수는 임의로 추가하여 사용하면 된다.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
void main(void)
{
char s1[21];
char s2[6];
scanf(" %s", s1);
scanf(" %s", s2);
// 코드 작성
}
입력 예시
abababac
aba
출력 예시
3
정답 코드
#if 0
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
void main(void)
{
char s1[21];
char s2[6];
scanf(" %s", s1);
scanf(" %s", s2);
int i, j, cnt = 0;
for (i = 0; s1[i] != '\0'; i++)
{
for (j = 0; ; j++)
{
if (s2[j] == '\0')
{
cnt++;
break;
}
else if ((s1[j + i] != s2[j]) || (s1[j + i] == '\0'))
{
break;
}
}
}
printf("%d\n", cnt);
}
#endif
/* 함수로 설계 */
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int str_cmp(char * p, char * q)
{
int i;
for (i = 0; ; i++)
{
if (q[i] == '\0') return 1;
if ((p[i] != q[i]) || (p[i] == '\0')) return 0;
}
}
void main(void)
{
char s1[21];
char s2[6];
scanf(" %s", s1);
scanf(" %s", s2);
int i, cnt = 0;
for (i = 0; s1[i] != '\0'; i++)
{
cnt += str_cmp(&s1[i], s2);
}
printf("%d\n", cnt);
}
메모
printf 내부의 \n 습관화 필요