상세 컨텐츠

본문 제목

C 언어 예제, 문자열 내에서 검색하기

컴퓨터 관련/C 언어 예제

by 열정과 함께 2014. 2. 16. 04:09

본문

목표는 이렇게 만드는 것이다.



일단 미흡한점을 좀 짚고 넘어가자면

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;

}


관련글 더보기

댓글 영역