목표는 이렇게 만드는 것이다.
일단 미흡한점을 좀 짚고 넘어가자면
1. 띄어쓰기를 문자 _ 로 대체해야 된다.
2. 원래 문자열의 교체는 안 된다.
3. 마지막에 마침표나 아니면 문장부호라도 넣어주지 않으면 마지막 단어는 검색이 잘 안 된다.
음..... 젠장.
#include <stdio.h>
int char_search(char *str1, char *str2, int *result);
int main()
{
char str1[1000];
char str2[1000];
int result[1000];
char str3[4];
int i;
printf("원본 문자열을 입력해 주십시오. 최대 1000자, 띄어쓰기는 '_' 를 활용하십시오. \n");
scanf("%s", str1);
for(;;)
{
printf("검색할 문자열을 입력해 주십시오. 최대 1000자, 띄어쓰기는 '_' 를 활용하십시오. \n");
scanf("%s", str2);
printf("검색을 수행합니다. \n");
char_search(str1, str2, result);
if(char_search(str1, str2, result) == 0)
{
printf("일치하는 부분이 없습니다. \n");
}
else
{
printf("%d 개의 일치하는 부분을 찾았습니다.", char_search(str1, str2, result));
for(i=0;i<1000;i++)
{
if(result[i] == 0)
{
break;
}
else
{
printf(" %d ",result[i]);
}
}
printf("번째 문자를 참조하십시오. \n");
}
printf("계속 검색하시겠습니까? yes/no :");
scanf("%s", str3);
if(str3[0] == 'n')
{
printf("검색이 종료됩니다. \n");
break;
}
}
return 0;
}
int char_search(char *str1, char *str2, int *result)
{
int i,j,k,l,m;
char a;
i = 0;
j = 0;
l = 0;
m = 0;
while(*str1)
{
if(*str1 == *str2)
{
for(;;)
{
str1++;
str2++;
j++;
m++;
if(*str2 == '\0')
{
i++;
result[i-1] = m-j+1;
l = 0;
str2 = str2 - j;
break;
}
else if(*str1 != *str2)
{
str2 = str2 - j;
str1++;
m++;
break;
}
}
}
else
{
str1++;
m++;
}
j=0;
}
result[i] = 0;
return i;
}
간략한 설명.이라고는 해도.....
#include <stdio.h>
int char_search(char *str1, char *str2, int *result);//일단 이 함수 위주로 설명
int main()//그러니까 이건 별로 설명할 게 없음.
{
char str1[1000];
char str2[1000];
int result[1000];
char str3[4];
int i;
printf("원본 문자열을 입력해 주십시오. 최대 1000자, 띄어쓰기는 '_' 를 활용하십시오. \n");
scanf("%s", str1);
for(;;)
{
printf("검색할 문자열을 입력해 주십시오. 최대 1000자, 띄어쓰기는 '_' 를 활용하십시오. \n");
scanf("%s", str2);
printf("검색을 수행합니다. \n");
char_search(str1, str2, result);
if(char_search(str1, str2, result) == 0)
{
printf("일치하는 부분이 없습니다. \n");
}
else
{
printf("%d 개의 일치하는 부분을 찾았습니다.", char_search(str1, str2, result));
for(i=0;i<1000;i++)
{
if(result[i] == 0)
{
break;
}
else
{
printf(" %d ",result[i]);
}
}
printf("번째 문자를 참조하십시오. \n");
}
printf("계속 검색하시겠습니까? yes/no :");
scanf("%s", str3);
if(str3[0] == 'n')
{
printf("검색이 종료됩니다. \n");
break;
}
}
return 0;
}//이 부분은 그다지 설명할 거 없음.
int char_search(char *str1, char *str2, int *result)
{
int i,j,k,l,m;
char a;//쓰다보니 그리됐는데 없어도 됨.
i = 0;//일치한 부분의 갯수
j = 0;//str2 배열의 위치를 정의하기 위한 부분
l = 0;
m = 0;//str1 배열의 위치를 정의하기 위한 부분.
while(*str1)//원 문자열 돌리는 부분
{
if(*str1 == *str2)//같은 문자를 발견하면 해당 부분이 검색의 대상에 해당될 수 있는지 따로 보게 만든다.
{
for(;;)
{
str1++;
str2++;
j++;
m++;
if(*str2 == '\0')//마지막에 공백까지 도달하면 일치하는 부분이 하나가 있는 것.
{
i++;
result[i-1] = m-j+1;//몇 번째 문자에서 위치하는 지 적기 위한 부분.
l = 0;
str2 = str2 - j;
break;
}
else if(*str1 != *str2)//중간에 틀린게 나오면 꽝.
{
str2 = str2 - j;
str1++;
m++;
break;
}
}
}
else
{
str1++;
m++;
}
j=0;
}
result[i] = 0;
return i;
}
C 언어 예제, 줄 세우기, 동점자 처리(구조체 사용) (0) | 2014.06.06 |
---|---|
C 언어 예제, 도서 관리 프로그램 (0) | 2014.02.22 |
C 언어 예제, 문자열 대조하기 (0) | 2014.02.12 |
C 언어 예제, 문자열 대소문자 전환하기 (0) | 2014.02.09 |
C 언어 예제, 문자열 뒤집기, 문자열 역순 출력 (0) | 2014.02.09 |
댓글 영역