Welcome

Wheresoever you go, go with all your heart. (Confucius)

1/18/2011

Getting the hash value in C++

C++ standard provides classes that get the hash value of the string corresponding to the character sequence.

ref - http://cplusplus.com/reference/std/locale/collate/hash/

A hash for a string is a value that uniquely identifies the content of the string, so that two strings with the same hash value, would compare equal by collate::compare, and two strings with different hash values would compare not equal.

Thus, two strings can be easily compared for equality by simply comparing their hash values, which are of an integer type.
During its operation, the version of this function in the generic template simply calls the virtual protected member do_transform, which is the member function in charge of performing the actions described above.

[Example]

// collate::hash example
#include <iostream>
#include <locale>
using namespace std;

int main ()
{
  string myberry = "strawberry";
  string yourberry;

  locale loc;                 // the "C" locale

  const collate<char>& coll = use_facet<collate<char> >(loc);

  long myhash = coll.hash(myberry.data(),myberry.data()+myberry.length());

  cout << "Please, enter your favorite berry:";
  getline (cin,yourberry);

  long yourhash = coll.hash(yourberry.data(),yourberry.data()+yourberry.length());

  if (myhash == yourhash)
    cout << "Mine too!\n";
  else
    cout << "I prefer strawberries...\n";

  return 0;
}

1/05/2011

Vi Set

:set ai (autoindeant)
윗라인과 같이 자동으로 들려쓰기를 해 줍니다. 
:set nu(number) or nonu(nonumber)
:set showmatch or noshowmatch
:set si
코딩 할때 if, for 같은 것을 입력 하고 다음 라인으로 이동시 자동으로 들여쓰기를해줍니다.
:set paste
set ai, set si 같은 옵션을 사용할 경우 붙여 넣기를 하면 계단현상이
발생함으로 붙여 넣기 할경우에 이 옵션을 켜주면 방지할 수 있음

:set ts=4 (tabstop)
[tab] 키를 입력 하였을때 이동하는 크기를 조정 합니다.

:set sw=4 (shiftwidth)
"set si" 했을 경우 들려쓰기 하는 깊이를 설정 합니다.

:set et (expandtab)
[tab] 키를 입력 하였을때 tab에 대당하는 space 만큼 이동 됩니다.
(Python 언어 코딩 할때 매우 편리 합니다.)

:set encoding=cp949 or utf-8
작업 하는 컴퓨터 또는 개발 언어에서 기본 인코딩 타입을 설정 할 수 있습니다.
:set t_ti= t_te=
터미널 환경에서 vi를 종료 할때, 편집 하던 화면이 그대로 남도록 함
BSD 에서는 기본값인데, Linux 에서는 화면이 지워집니다.
BSD 환경에 익숙한 사람은 여간 불편한게 아니랍니다. 이 옵션을 주시면
바로 해결 됩니다.

:set ruler
우측 하단에 라인 및 컬럼 위치 표시및 전체 문서의 위치를 %로 표시

:set ff=unix  (dos, mac)
라인변경 문자를 변경합니다.
:set key=<password>, set key=
문서를 암호화 시키고, 암호를 풀수 있음

:set ic (ignorecase)
검색패턴 사용시 대소문자를 구별 하지 않음
:set wam
저장하지 않고 종료시에 경고메시지 출력
:set sm (showmatch)
가로를 닫을때 열기 괄호를 보여줌

 [참고]
 * 알고 있겠지만 모든 명령의 취소는 no를 앞에 붙여 주시면 됩니다.
   예)  :set noai

 * 항상 같은 설정이 되도록 하려면 UNIX는 홈디렉토리 아래에 .vimrc 에 넣어 주시구요
   windows 는  vim 설치 디렉토리에 _vimrc 파일에 넣어 주시면 됩니다.
   예) set ts=4
       set si
       set ai
       set sw=4
       set encoding=cp494

vi 편집 작업시 
 1) 화면 스크롤
    ^F : 한 화면 앞으로 스크롤
     ^B : 한 화면 뒤로 스크롤
     ^D : 반 화면 앞으로 스크롤
     ^U : 반 화면 뒤로 스크롤
     ^E : 한줄 앞으로 스크롤
     ^Y : 한줄 뒤로 스크롤
      H (shift+h) : 화면의 맨 윗줄로
      M (shift+m) : 화면의 중간 줄로
      L (shift+l): 화면의 맨 아랫줄로
  
 2) 화면 나누기
     : vs  --> 수직으로 나눔
     : sp  --> 스평으로 나눔
     ^ww   --> 화면 간의 이동

 3) 글자 변경
     Ctrl + A  --> 커서 위치의 숫자 증가
     Ctrl + A  --> 커서 위치의 숫자 감소

 4) 마크 이동
     m[a~z] --> 현재의 위치를 기록
    '[a~z]  --> 기록한 위치로 이동
    ''      --> 이동하기 전의 위치로 이동

 5) 접기
    V 로 블럭 설정을 한후에 'zf' 하면 접힘
    'zo' 를 하면 다시 펴짐

 6) 함수/변수명 자동 완성
     호출 하고자 하는 변수명이나 함수명의 앞글자만 쓰고서 ^p 를 입력 하면 자동 완성 됨

 7) 잠시 쉘로 나가기
     ^z, 들어 올때는 fg