=== 소감 === 어쩌다가 이렇게 길어지게 됐는지 모르겠다. 여튼 처음 문제를 접했을 때 연필을 끄적거리지 않았어서 후회가 생긴다. 연필을 잡지 않으면 시간이 배로 드는것 같다. 앞으로 실수하지 않게 데블스캠프때 배웠듯이, 건축에 있어서 설계를 작성하는것은 중요한 것 처럼 프로그래밍에 있어서도 구상과 설계는 매우 중요하다고 느낀다. ==== 알고리즘 ==== 그냥 알고리즘을 생각했다. 어떻게 보면 복잡한 것 같기도 하다.ㅡㅠ His teaching method is very good. 이번 프로그래밍의 알고리즘. 단어의 시작을 중점으로 한다.(나는 문자열 이라기 보다는 단어 검색 중심으로 짠것같다.) 즉, H, t, m, i, v, g가 기점이 될 수 있다. 문장 속의 단어의 첫 글자와, 찾아볼 단어의 첫글자의 동일한가 부터 시작한다. 만약에 Hot이라는 단어를 저 문장에서 찾았을때, 먼저 H로 시작하는 단어가 있기 때문에 His와 비교를 당하게 된다. 다음은 o와 i.. 다르기 때문에 found 이 0이 되어서 찾지 못했음을 알린다. 만약에 첫 글자 부터 동일하지 않다면 비교도 하지 않고도 찾지못함을 알린다. === 소스 === {{{~cpp #include void exist_word(char x[40], int exist_str[10]); //x[i]에 문자열의 유무 int compare_str(char x[40], char search_str[15], int exist_str[10]); // 문자열 비교 int word_num = 1, search_str_num = 0; int found = 0; int temp = 0; void main() { char x[40] = "His teaching method is very good."; char search_str[15]; int exist_str[10]; // exist_str[i]에는 x문자열중 i번째 문자열이 몇번째 문자에 나오나 FILE *fp; fp = fopen("result.out", "w"); while(1){ word_num = 1; search_str_num = 0; found = 0; temp = 0; printf("끝내려면 ""EE""입력\n"); //출력. printf("자료 -> %s", x); printf("\n찾을 문자열 -> "); scanf("%s", search_str); fprintf(fp,"자료 -> %s", x); //result.out에 저장. fprintf(fp, "\n찾을 문자열 -> "); fprintf(fp, "%s", search_str); if(search_str[0] == 'E' && search_str[1] == 'E') break; exist_word(x, exist_str); found = compare_str(x, search_str, exist_str); switch(found){ case 1: fprintf(fp, "\nfirst found -> %d\n\n", exist_str[word_num]+1); break; case 0: fprintf(fp, "\nNot found!\n\n"); break; } } fclose(fp); } void exist_word(char x[40], int exist_str[10]) { int num = 2, x_n = 0; exist_str[1] = 0; while(x[x_n]) { if(x[x_n] == ' ') { exist_str[num] = x_n + 1; //빈칸 다음에 문자열이 나온다고 가정. ++num; } ++x_n; } } int compare_str(char x[40], char search_str[15], int exist_str[10]) { if(x[exist_str[word_num]] != search_str[search_str_num]) { ++word_num; if(exist_str[word_num] >= 0) compare_str(x, search_str, exist_str); }else{ temp = exist_str[word_num]; while(search_str[search_str_num]) { if(x[temp] == search_str[search_str_num]){ found = 1; ++temp; ++search_str_num; }else{ found = 0; break; } } } return found; } }}} ==== C++로 문자 검색. ==== {{{~cpp //cpp1.cpp #include #include "class.h" using namespace std; void main() { Search_ch c; c.input(); c.search(); c.print(); } }}} {{{~cpp //cpp2.cpp #include #include "class.h" using namespace std; void Search_ch::input() { cin>>str; cin>>ch; } int Search_ch::search() { int i, str_len, k; str_len = strlen(str); for(i = 0; i <= str_len-1; i++) { if(str[i] == ch) { k = i; break; }else{ k = 0; } } return k; } void Search_ch::print() { int found_num = search(); if(found_num == 0){ cout << "Not Found!!"; }else if(0 < found_num && found_num < strlen(str)){ cout << "Found!! >>>" <