Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #define MAX_SIZE 100
- // 찾는 함수
- int search(char *sentence, int sentence_length, char *ex_word, int ex_word_length)
- {
- int sentence_index = 0;
- int ex_word_index = 0;
- int index = 0;
- int j = 0;
- while (sentence_index <= sentence_length)
- {
- if (sentence[sentence_index] == ex_word[ex_word_index])
- {
- sentence_index++;
- ex_word_index++;
- int match_count = 1;
- while(ex_word_index < ex_word_length)
- {
- if (sentence[sentence_index] != ex_word[ex_word_index])
- {
- break;
- }
- else
- {
- match_count++;
- sentence_index++;
- ex_word_index++;
- }
- }
- if (match_count == ex_word_length)
- {
- return sentence_index - ex_word_length;
- }
- else
- {
- ex_word_index = 0;
- }
- }
- else
- {
- sentence_index++;
- ex_word_index = 0;
- }
- }
- return -1; // 이 index는 삭제위치
- }
- // 삭제 함수
- void delete (char *sentence, int sentence_index, int word_length)
- {
- int index;
- for (index = sentence_index; index < sentence_index + word_length; index++)
- {
- sentence[index] = ' ';
- }
- }
- // 이동 함수
- // sentence_index 에서 부터 amount 만큼 sentence 를 밀어준다
- void shift(int ex_word_length, int amount, char *sentence, int sentence_index, int sentence_length)
- {
- int index;
- // ex_word_length : length of existing word
- // amount : difference
- // sentence_index : index of ex_word in sentence
- if(amount == 0)
- {
- return;
- }
- if (amount > 0)
- {
- for(index = sentence_index + ex_word_length; index <= sentence_length + amount; index++)
- {
- sentence[index - amount] = sentence[index];
- }
- return;
- }
- if (amount < 0)
- {
- amount *= -1;
- for(index = sentence_length + amount; index >= sentence_index + ex_word_length; index--)
- {
- sentence[index + amount] = sentence[index];
- }
- return;
- }
- }
- // 삽입 함수
- void insert(char *sentence, int index, char *new_word, int new_word_length)
- {
- int i;
- for (i = 0; i < new_word_length; i++)
- {
- sentence[index] = new_word[i];
- index++;
- }
- }
- // 문자길이 찾기
- int find_word_length(char *array)
- {
- int i = 0;
- while (1)
- {
- if (array[i] == '\n' || array[i] == '\0')
- {
- array[i] = '\0';
- return i;
- }
- i++;
- }
- }
- int main(void)
- {
- int index; // 문장에서 단어가 나오는 자리
- int i = 0;
- int j;
- int difference; // ex_word 길이 - new_word 길이
- char sentence[1000] = { '\0', }; // 문장
- char ex_word[MAX_SIZE] = { '\0', }; // 찾는 단어
- char new_word[MAX_SIZE] = { '\0', }; // 바꿀 단어
- int sentence_length;
- int ex_word_length;
- int new_word_length;
- fgets(sentence, 1000, stdin);
- sentence_length = find_word_length(sentence);
- while (1)
- {
- i = 0;
- sentence_length = find_word_length(sentence);
- fgets(ex_word, sizeof(ex_word),stdin);
- if (ex_word[0] == '0')
- {
- break;
- }
- fgets(new_word, sizeof(new_word), stdin);
- if (new_word[0] == '0')
- {
- break;
- }
- ex_word_length = find_word_length(ex_word);
- new_word_length = find_word_length(new_word);
- difference = ex_word_length - new_word_length;
- while(1)
- {
- index = search(sentence + i, sentence_length - i, ex_word, ex_word_length);
- if (index == -1)
- {
- break;
- }
- index += i;
- delete(sentence, index, ex_word_length);
- shift(ex_word_length, difference, sentence, index, sentence_length);
- insert(sentence, index, new_word, new_word_length);
- i = index + new_word_length;
- }
- printf("%s\n", sentence);
- for (j = 0; j < ex_word_length; j++)
- {
- ex_word[j] = '\0';
- }
- for (j = 0; j < new_word_length; j++)
- {
- new_word[j] = '\0';
- }
- }
- return 0;
- }
Add Comment
Please, Sign In to add comment