비주얼 스튜디오 함수 주석 - bijueol seutyudio hamsu juseog

반응형

코드를 작성하다보면, 코드가 점점 길어지고, 작성한 함수에서 사용하는 파라미터를 일일이 기억해서 사용하는것이 어려워진다.

이때 함수에 작성해 놓은 주석 생성을 도와주는 유용한 앱이 있다.

autoDocstring

비주얼 스튜디오 함수 주석 - bijueol seutyudio hamsu juseog

앱을 설치하고 쌍따옴표 3개를 입력하면  Docstring을 생성할 것인지를 확인하는 창이 나타난다.

여기에서 엔터를 누르면, 현재 기준으로 함수 설명, 입력 값, 출력 값의 기본 포맷을 만들어 주어서 쉽게 설명을 작성할 수 있다.

비주얼 스튜디오 함수 주석 - bijueol seutyudio hamsu juseog

공유하기

게시글 관리

구독하기Asecurity

  • 카카오스토리
  • 트위터
  • 페이스북

'Python' 카테고리의 다른 글

Python - 왜 f-string을 쓰라는 걸까 "Formatting a regular string which could be a f-stri  (0)2022.08.02Python - Log Decorator 활용  (0)2022.08.01Python 3.10 신기능 패턴 매칭 switch match 추가등 기능 개선  (0)2022.07.31Python 인증서 오류 해결 - SSLError SSLCertVerificationError CERTIFICATE_VERIFY_FAILED  (0)2022.07.29Python - FastApi Cross-Origin Resource Sharing (CORS) 이해/해결  (0)2022.07.25

비주얼 스튜디오에서 간편하게 쓸수 있는 주석 단축키를 만들어보자.


주석처리 : Ctrl + / <두번>

주석처리 제거 : Ctrl + Shift + /


1. 비쥬얼 스튜디오 - 도구 - 옵션 에 들어간다.

비주얼 스튜디오 함수 주석 - bijueol seutyudio hamsu juseog


2, 환경 - 키보드 메뉴를 선택한다.

비주얼 스튜디오 함수 주석 - bijueol seutyudio hamsu juseog


3,. 다음 두가지 명령에 지정된 단축키를 제거 해준다.

<편집. 선택영역을 주석으로처리>

<편집.선택영역의주석처리제거>

비주얼 스튜디오 함수 주석 - bijueol seutyudio hamsu juseog


4. 새로운 바로가기 키를 설정해준다.

바로 가기 키 누르기 입력 칸에서 사용할 단축키를 누르고 할당 버튼을 누르면 된다.

<편집. 선택영역을 주석으로처리> : Ctrl + / <두번>

<편집.선택영역의주석처리제거> : Ctrl + Shift + /

비주얼 스튜디오 함수 주석 - bijueol seutyudio hamsu juseog


공유하기

게시글 관리

구독하기Luyin

'컴퓨터' 카테고리의 다른 글

Entity, Property Attribute, Instance 용어의 차이  (0)2014.03.20Javascript(자바스크립트)를 이용한 HTML 기사 본문 추출 방법  (2)2013.10.27Windows 8 에드혹(Ad-hoc) 만들기  (3)2013.10.09[Chrome Extensions] Chrome.tts  (0)2013.09.27[Linux][라즈베리파이][기본설정2] 사용자 계정 추가  (0)2013.09.11

안녕하세요. BlockDMask입니다.
오늘은 우리가 자주 쓰는 IDE중의 하나인 Visual Studio 비주얼 스튜디오 프로그램에서 주석을 어떻게 다는지에 대해서 알아보려고 합니다.

비주얼 스튜디오 주석 단축키


1. 커서 위치 한 줄 주석 설정

커서 위치에서 Ctrl + K + C

주석을 처리할 위치에 커서가 있는 상태에서 Ctrl + K + C를 누르면 한 줄 주석이 됩니다.

비주얼 스튜디오 함수 주석 - bijueol seutyudio hamsu juseog
비주얼 스튜디오 주석 단축키1
비주얼 스튜디오 함수 주석 - bijueol seutyudio hamsu juseog
비주얼 스튜디오 주석 단축키2

이렇게 주석처리를 하고자 하는 위치에서 Ctrl + K + C를 누르게 되면 위 캡처와 같이 한 줄 주석 // 처리가 됩니다.

2. 드래그 한 영역한 줄 주석 설정

들여 쓰기까지 포함해서 드래그 후 Ctrl + K + C 

주석 처리할 공간을 드래그하고 드래그해두고 Ctrl + K + C를 누르게 되면 해당 영역이 드래그한 영역 전부 한 줄 주석 처리가 됩니다.

비주얼 스튜디오 함수 주석 - bijueol seutyudio hamsu juseog
비주얼 스튜디오 여러줄 주석 단축키

위와 같이 주석 처리할 라인을 드래그해서 블록처리를 한 다음에

비주얼 스튜디오 함수 주석 - bijueol seutyudio hamsu juseog
비주얼 스튜디오 주석 단축키

Ctrl + K + C를 누르면 "//" 한 줄 주석으로 각 라인마다 주석 처리된 것을 볼 수 있습니다.

3. 드래그 한 영역 여러 줄 주석 설정

들여 쓰기를 제외하고 해서 드래그 후 Ctrl + K + C

주석 처리할 공간을 드래그해두고 Ctrl + K + C를 누르게 되면 해당 영역이 드래그한 영역 전부 한 줄 주석 처리가 됩니다.

비주얼 스튜디오 함수 주석 - bijueol seutyudio hamsu juseog
VS 주석 단축키

위 캡처에서 보이는 것처럼 들여 쓰기를 포함하지 않고 블록 처리를 하고 Ctrl + K + C를 누르게 되면

비주얼 스튜디오 함수 주석 - bijueol seutyudio hamsu juseog
VS 주석 단축키

위와 같이 여러 줄 주석 /* ~~ */ 을 통해서 주석 처리됨을 볼 수 있습니다.

4. 주석 해제 단축키 

Ctrl + K + U 

주석이 있는 곳 혹은 영역에서 Ctrl + K + U를 누르면 주석이 해제됩니다.

비주얼 스튜디오 함수 주석 - bijueol seutyudio hamsu juseog
VS 주석 해제 단축키

이것처럼 주석을 해제할 곳을 되어있는 곳을 드래그해서 블록 처리를 합니다.

비주얼 스튜디오 함수 주석 - bijueol seutyudio hamsu juseog
비주얼스튜디오 주석 해제

Ctrl + K + U를 누르게 되면 주석이 풀리게 됩니다.

이상으로 비주얼 스튜디오(Visual Studio)에서 주석 단축키에 대해서 알아보았습니다.
간단하게 정리하면 아래와 같습니다.
주석 설정 : Ctrl + K + C
주석 해제 : Ctrl + K + U 

오늘도 방문해주셔서 감사합니다.

str1 에서 str2 를 검색하여 가장 먼저 나타나는 곳의 위치를 리턴한다. 이 때 일치하는 문자열이 없다면 널 포인터를 리턴하게 된다. 검색에서 마지막 널 문자는 포함하지 않는다.

인자

str1

검색이 수행되는 C 형식 문자열

str2

찾을 C 형식 문자열

리턴값

str1 에서 str2 를 찾았다면 가장 먼저 나오는 곳의 위치를 리턴한다. 만일 str2str1 에 존재하지 않는다면 널을 리턴한다.

구현 예

/*이 소스는 http://www.jbox.dk/sanos/source/lib/string.c.html에서 가져왔습니다*/
char *strstr(const char *str1, const char *str2) {
  char *cp = (char *)str1;
  char *s1, *s2;
  if (!*str2) return (char *)str1;
  while (*cp) {
    s1 = cp;
    s2 = (char *)str2;
    while (*s1 && *s2 && !(*s1 - *s2)) s1++, s2++;
    if (!*s2) return cp;
    cp++;
  }
  return NULL;
}

문자열 검색에 관련된 알고리즘

통상적으로 구현된 strstr 함수는 위에서 사용된 코드 처럼 단순하게도 각 문자열을 일일히 검색하는 방식을 취하고 있다. 이는 짧은 문자열을 검색하는데 에는 요긴하게 사용될 수 있지만 문자열의 길이가 길어진다면, 예를 들어 수십장 짜리 문서에서 특정 단어를 찾을 때 에는 적합하지 않은 방식이라 할 수 있다.

이를 위해 여러가지 문자열 검색 알고리즘이 있는데 대표적으로 사용되는 것이 보이어 무어(Boyer-Moore) 알고리즘 이다. (이는 현재 대부분의 워드 프로세서에서 '찾기' 기능에 사용되고 있다) 그 외에도 카프- 라빈(Karp-Rabin) 검색 알고리즘, 크누스 - 모리스 - 프랫(Knuth - Morris - Pratt, KMP) 알고리즘 등이 있지만 여기서는 보이어 무어 알고리즘만 소개한다.

보이어 무어(Boyer - Moore) 알고리즘은 크게 두 가지 종류의 이동으로 구성되어 있는데 하나는 착한 접미부 이동(Good Suffix Shift) 와 다른 하나는 나쁜 문자 이동(Bad Character Shift) 이다. 가장 먼저 착한 접미부 이동이 무엇인지 보자

비주얼 스튜디오 함수 주석 - bijueol seutyudio hamsu juseog

위와 같이

/*이 소스는 http://www.jbox.dk/sanos/source/lib/string.c.html에서 가져왔습니다*/
char *strstr(const char *str1, const char *str2) {
  char *cp = (char *)str1;
  char *s1, *s2;
  if (!*str2) return (char *)str1;
  while (*cp) {
    s1 = cp;
    s2 = (char *)str2;
    while (*s1 && *s2 && !(*s1 - *s2)) s1++, s2++;
    if (!*s2) return cp;
    cp++;
  }
  return NULL;
}
2 라는 문자열에서
/*이 소스는 http://www.jbox.dk/sanos/source/lib/string.c.html에서 가져왔습니다*/
char *strstr(const char *str1, const char *str2) {
  char *cp = (char *)str1;
  char *s1, *s2;
  if (!*str2) return (char *)str1;
  while (*cp) {
    s1 = cp;
    s2 = (char *)str2;
    while (*s1 && *s2 && !(*s1 - *s2)) s1++, s2++;
    if (!*s2) return cp;
    cp++;
  }
  return NULL;
}
3 라는 문자열을 찾는다고 하자. 보이어 무어 알고리즘의 특징은, 문자열의 이동 자체는 왼쪽에서 오른쪽으로 쭉 가면서 찾지만 정작 문자열의 비교는 오른쪽에서 왼쪽으로 한다. 따라서 만일 특정 위치에서
/*이 소스는 http://www.jbox.dk/sanos/source/lib/string.c.html에서 가져왔습니다*/
char *strstr(const char *str1, const char *str2) {
  char *cp = (char *)str1;
  char *s1, *s2;
  if (!*str2) return (char *)str1;
  while (*cp) {
    s1 = cp;
    s2 = (char *)str2;
    while (*s1 && *s2 && !(*s1 - *s2)) s1++, s2++;
    if (!*s2) return cp;
    cp++;
  }
  return NULL;
}
3 와
/*이 소스는 http://www.jbox.dk/sanos/source/lib/string.c.html에서 가져왔습니다*/
char *strstr(const char *str1, const char *str2) {
  char *cp = (char *)str1;
  char *s1, *s2;
  if (!*str2) return (char *)str1;
  while (*cp) {
    s1 = cp;
    s2 = (char *)str2;
    while (*s1 && *s2 && !(*s1 - *s2)) s1++, s2++;
    if (!*s2) return cp;
    cp++;
  }
  return NULL;
}
2 를 비교하는데, 오른쪽의
/*이 소스는 http://www.jbox.dk/sanos/source/lib/string.c.html에서 가져왔습니다*/
char *strstr(const char *str1, const char *str2) {
  char *cp = (char *)str1;
  char *s1, *s2;
  if (!*str2) return (char *)str1;
  while (*cp) {
    s1 = cp;
    s2 = (char *)str2;
    while (*s1 && *s2 && !(*s1 - *s2)) s1++, s2++;
    if (!*s2) return cp;
    cp++;
  }
  return NULL;
}
6 만큼의 부분이 일치되었다고 하자 (위 그림에서
/*이 소스는 http://www.jbox.dk/sanos/source/lib/string.c.html에서 가져왔습니다*/
char *strstr(const char *str1, const char *str2) {
  char *cp = (char *)str1;
  char *s1, *s2;
  if (!*str2) return (char *)str1;
  while (*cp) {
    s1 = cp;
    s2 = (char *)str2;
    while (*s1 && *s2 && !(*s1 - *s2)) s1++, s2++;
    if (!*s2) return cp;
    cp++;
  }
  return NULL;
}
6 라고 표시된 부분, 이 부분을 가리켜 '착한 접미부(Good Suffix)' 라고 부른다)

그리고 왼쪽의 'b' 와 'a' 가 일치하지 않은 부분이라고 하자. 이렇게 된다면 보이어 무어 알고리즘에서는

/*이 소스는 http://www.jbox.dk/sanos/source/lib/string.c.html에서 가져왔습니다*/
char *strstr(const char *str1, const char *str2) {
  char *cp = (char *)str1;
  char *s1, *s2;
  if (!*str2) return (char *)str1;
  while (*cp) {
    s1 = cp;
    s2 = (char *)str2;
    while (*s1 && *s2 && !(*s1 - *s2)) s1++, s2++;
    if (!*s2) return cp;
    cp++;
  }
  return NULL;
}
3 를 문자열
/*이 소스는 http://www.jbox.dk/sanos/source/lib/string.c.html에서 가져왔습니다*/
char *strstr(const char *str1, const char *str2) {
  char *cp = (char *)str1;
  char *s1, *s2;
  if (!*str2) return (char *)str1;
  while (*cp) {
    s1 = cp;
    s2 = (char *)str2;
    while (*s1 && *s2 && !(*s1 - *s2)) s1++, s2++;
    if (!*s2) return cp;
    cp++;
  }
  return NULL;
}
3 의 또다른 착한 접미부가 나오는 곳과 기존의 착한 접미부가 있던 곳으로 오게 오른쪽으로 쉬프트를 하게 된다. 위 그림에서 보듯이 기존에
/*이 소스는 http://www.jbox.dk/sanos/source/lib/string.c.html에서 가져왔습니다*/
char *strstr(const char *str1, const char *str2) {
  char *cp = (char *)str1;
  char *s1, *s2;
  if (!*str2) return (char *)str1;
  while (*cp) {
    s1 = cp;
    s2 = (char *)str2;
    while (*s1 && *s2 && !(*s1 - *s2)) s1++, s2++;
    if (!*s2) return cp;
    cp++;
  }
  return NULL;
}
6 가 위치했던 곳에
/*이 소스는 http://www.jbox.dk/sanos/source/lib/string.c.html에서 가져왔습니다*/
char *strstr(const char *str1, const char *str2) {
  char *cp = (char *)str1;
  char *s1, *s2;
  if (!*str2) return (char *)str1;
  while (*cp) {
    s1 = cp;
    s2 = (char *)str2;
    while (*s1 && *s2 && !(*s1 - *s2)) s1++, s2++;
    if (!*s2) return cp;
    cp++;
  }
  return NULL;
}
3 의 또다른
/*이 소스는 http://www.jbox.dk/sanos/source/lib/string.c.html에서 가져왔습니다*/
char *strstr(const char *str1, const char *str2) {
  char *cp = (char *)str1;
  char *s1, *s2;
  if (!*str2) return (char *)str1;
  while (*cp) {
    s1 = cp;
    s2 = (char *)str2;
    while (*s1 && *s2 && !(*s1 - *s2)) s1++, s2++;
    if (!*s2) return cp;
    cp++;
  }
  return NULL;
}
6 가 일치되었음을 볼 수 있다. 예를 들어 아래의 그림을 보면 단박에 이해가 된다.

비주얼 스튜디오 함수 주석 - bijueol seutyudio hamsu juseog

위와 같이 또다른 접미부에 도달하게 문자열을 이동시키는 것이다. 그리고는 다시 이동 시킨 문자열의 맨 오른쪽으로 부터 검사를 수행한다. 그런데, 만일 문자열에 또다른 착한 접미부가 없다면 어떻게 될까.

비주얼 스튜디오 함수 주석 - bijueol seutyudio hamsu juseog

그렇게 된다면 일치하는 착한 접미부에서

/*이 소스는 http://www.jbox.dk/sanos/source/lib/string.c.html에서 가져왔습니다*/
char *strstr(const char *str1, const char *str2) {
  char *cp = (char *)str1;
  char *s1, *s2;
  if (!*str2) return (char *)str1;
  while (*cp) {
    s1 = cp;
    s2 = (char *)str2;
    while (*s1 && *s2 && !(*s1 - *s2)) s1++, s2++;
    if (!*s2) return cp;
    cp++;
  }
  return NULL;
}
3 에 들어있는 가장 긴 접미부를 찾게 된다. 위 그림에서는
/*

참고로 다음 코드는
http://en.wikipedia.org/wiki/Boyer%E2%80%93Moore_string_search_algorithm 에서
가져왔습니다.

테이블을 생성하는 함수는
나쁜 문자 이동의 경우 static void prepare_badcharacter_heuristic,
착한 접미부 이동의 경우 void prepare_goodsuffix_heuristic 이다.

*/
#include <limits.h>
#include <string.h>

#define ALPHABET_SIZE (1 << CHAR_BIT)

static void compute_prefix(const char *str, size_t size, int result[size]) {
  size_t q;
  int k;
  result[0] = 0;

  k = 0;
  for (q = 1; q < size; q++) {
    while (k > 0 && str[k] != str[q]) k = result[k - 1];

    if (str[k] == str[q]) k++;
    result[q] = k;
  }
}

static void prepare_badcharacter_heuristic(const char *str, size_t size,
                                           int result[ALPHABET_SIZE]) {
  size_t i;

  for (i = 0; i < ALPHABET_SIZE; i++) result[i] = -1;

  for (i = 0; i < size; i++) result[(size_t)str[i]] = i;
}

void prepare_goodsuffix_heuristic(const char *normal, size_t size,
                                  int result[size + 1]) {
  char *left = (char *)normal;
  char *right = left + size;
  char reversed[size + 1];
  char *tmp = reversed + size;
  size_t i;

  /* reverse string */
  *tmp = 0;
  while (left < right) *(--tmp) = *(left++);

  int prefix_normal[size];
  int prefix_reversed[size];

  compute_prefix(normal, size, prefix_normal);
  compute_prefix(reversed, size, prefix_reversed);

  for (i = 0; i <= size; i++) {
    result[i] = size - prefix_normal[size - 1];
  }

  for (i = 0; i < size; i++) {
    const int j = size - prefix_reversed[i];
    const int k = i - prefix_reversed[i] + 1;

    if (result[j] > k) result[j] = k;
  }
}
/*
 * Boyer-Moore search algorithm
 */
const char *boyermoore_search(const char *haystack, const char *needle) {
  /*
   * Calc string sizes
   */
  size_t needle_len, haystack_len;
  needle_len = strlen(needle);
  haystack_len = strlen(haystack);

  /*
   * Simple checks
   */
  if (haystack_len == 0) return NULL;
  if (needle_len == 0) return haystack;

  /*
   * Initialize heuristics
   */
  int badcharacter[ALPHABET_SIZE];
  int goodsuffix[needle_len + 1];

  prepare_badcharacter_heuristic(needle, needle_len, badcharacter);
  prepare_goodsuffix_heuristic(needle, needle_len, goodsuffix);

  /*
   * Boyer-Moore search
   */
  size_t s = 0;
  while (s <= (haystack_len - needle_len)) {
    size_t j = needle_len;
    while (j > 0 && needle[j - 1] == haystack[s + j - 1]) j--;

    if (j > 0) {
      int k = badcharacter[(size_t)haystack[s + j - 1]];
      int m;
      if (k < (int)j && (m = j - k - 1) > goodsuffix[j])
        s += m;
      else
        s += goodsuffix[j];
    } else {
      return haystack + s;
    }
  }

  /* not found */
  return NULL;
}
4 가 착한 접미부
/*이 소스는 http://www.jbox.dk/sanos/source/lib/string.c.html에서 가져왔습니다*/
char *strstr(const char *str1, const char *str2) {
  char *cp = (char *)str1;
  char *s1, *s2;
  if (!*str2) return (char *)str1;
  while (*cp) {
    s1 = cp;
    s2 = (char *)str2;
    while (*s1 && *s2 && !(*s1 - *s2)) s1++, s2++;
    if (!*s2) return cp;
    cp++;
  }
  return NULL;
}
6 중
/*이 소스는 http://www.jbox.dk/sanos/source/lib/string.c.html에서 가져왔습니다*/
char *strstr(const char *str1, const char *str2) {
  char *cp = (char *)str1;
  char *s1, *s2;
  if (!*str2) return (char *)str1;
  while (*cp) {
    s1 = cp;
    s2 = (char *)str2;
    while (*s1 && *s2 && !(*s1 - *s2)) s1++, s2++;
    if (!*s2) return cp;
    cp++;
  }
  return NULL;
}
3 에 들어있는 가장 긴 접미부가 된다. 그리고
/*

참고로 다음 코드는
http://en.wikipedia.org/wiki/Boyer%E2%80%93Moore_string_search_algorithm 에서
가져왔습니다.

테이블을 생성하는 함수는
나쁜 문자 이동의 경우 static void prepare_badcharacter_heuristic,
착한 접미부 이동의 경우 void prepare_goodsuffix_heuristic 이다.

*/
#include <limits.h>
#include <string.h>

#define ALPHABET_SIZE (1 << CHAR_BIT)

static void compute_prefix(const char *str, size_t size, int result[size]) {
  size_t q;
  int k;
  result[0] = 0;

  k = 0;
  for (q = 1; q < size; q++) {
    while (k > 0 && str[k] != str[q]) k = result[k - 1];

    if (str[k] == str[q]) k++;
    result[q] = k;
  }
}

static void prepare_badcharacter_heuristic(const char *str, size_t size,
                                           int result[ALPHABET_SIZE]) {
  size_t i;

  for (i = 0; i < ALPHABET_SIZE; i++) result[i] = -1;

  for (i = 0; i < size; i++) result[(size_t)str[i]] = i;
}

void prepare_goodsuffix_heuristic(const char *normal, size_t size,
                                  int result[size + 1]) {
  char *left = (char *)normal;
  char *right = left + size;
  char reversed[size + 1];
  char *tmp = reversed + size;
  size_t i;

  /* reverse string */
  *tmp = 0;
  while (left < right) *(--tmp) = *(left++);

  int prefix_normal[size];
  int prefix_reversed[size];

  compute_prefix(normal, size, prefix_normal);
  compute_prefix(reversed, size, prefix_reversed);

  for (i = 0; i <= size; i++) {
    result[i] = size - prefix_normal[size - 1];
  }

  for (i = 0; i < size; i++) {
    const int j = size - prefix_reversed[i];
    const int k = i - prefix_reversed[i] + 1;

    if (result[j] > k) result[j] = k;
  }
}
/*
 * Boyer-Moore search algorithm
 */
const char *boyermoore_search(const char *haystack, const char *needle) {
  /*
   * Calc string sizes
   */
  size_t needle_len, haystack_len;
  needle_len = strlen(needle);
  haystack_len = strlen(haystack);

  /*
   * Simple checks
   */
  if (haystack_len == 0) return NULL;
  if (needle_len == 0) return haystack;

  /*
   * Initialize heuristics
   */
  int badcharacter[ALPHABET_SIZE];
  int goodsuffix[needle_len + 1];

  prepare_badcharacter_heuristic(needle, needle_len, badcharacter);
  prepare_goodsuffix_heuristic(needle, needle_len, goodsuffix);

  /*
   * Boyer-Moore search
   */
  size_t s = 0;
  while (s <= (haystack_len - needle_len)) {
    size_t j = needle_len;
    while (j > 0 && needle[j - 1] == haystack[s + j - 1]) j--;

    if (j > 0) {
      int k = badcharacter[(size_t)haystack[s + j - 1]];
      int m;
      if (k < (int)j && (m = j - k - 1) > goodsuffix[j])
        s += m;
      else
        s += goodsuffix[j];
    } else {
      return haystack + s;
    }
  }

  /* not found */
  return NULL;
}
4 가 일치되게 오른쪽으로 쉬프트를 하게 된다. 이 과정을 예를 들어 보면

비주얼 스튜디오 함수 주석 - bijueol seutyudio hamsu juseog

와 같이 나타난다.

그런데 만일 착한 접미부가 나타나지 않는다면 어떻게 될까. 예를 들면 아래와 같은 상황이다.

비주얼 스튜디오 함수 주석 - bijueol seutyudio hamsu juseog

이렇게 처음 부터 불일치 되는 문자를 '나쁜 문자' 라 부르며 여기서 검색하는 문자열의 문자가 해당된다. 즉, 위 경우 나쁜 문자는 'b' 가 된다. 이렇게 나쁜 문자가 오는 경우는 검색하는 문자열에서 가장 오른쪽에 나타나는 나쁜 문자를 찾아서 그 위치로 이동 시켜 주면 된다. 즉, 아래 처럼 된다.

비주얼 스튜디오 함수 주석 - bijueol seutyudio hamsu juseog

만일 나쁜 문자가 포함되어 있지 않는다면 그 문자열 전체 길이 만큼 오른쪽으로 쉬프트 해주면 된다.

위와 같이 보이어 무어 알고리즘은 두 개의 쉬프트로 구성되어 있는데, 각 쉬프트를 빠르게 처리하기 위해 테이블을 만든다. 테이블을 만드는 과정은 간단하므로 생략하도록 한다. (테이블을 만드는 방법을 보시려면 http://xenostudy.tistory.com/72로 들어가보시기 바랍니다)