Programing/C- programing

C언어 String과, 관련함수 function

sosal 2009. 9. 29. 10:37
반응형

/*
 * made by so_sal
 * http://sosal.tistory.com/
 */

#include<string.h> :: c언어 에서 사용합니다.
문자열 처리 함수들을 모아놓은 헤더파일입니다.
#include<cstring> :: c++에서 사용합니다. (사실 안에 string.h를 포함합니다.)

strlen() :: string lenth :: 길이 구하기
strcpy() :: string copy :: 복사
strncpy() :: string + n + copy :: n만큼 복사
strcmp() :: string compare :: 문자열 비교 (대소문자 구분)
strncmp() :: string + n + copy :: 문자열 n만큼 비교 (대소문자 구분)
strcat() :: string concatenate :: 문자열 연결 (이어쓰기)
strncat() :: string + n + concatenate :: 문자열 n만큼 연결 (이어쓰기)

만약 배열을 strcmp, 또는 strncmp 로 비교한다면,
NULL 문자를 만날시, 배열의 끝으로 생각하여 뒷부분은 더이상 비교하지 않게 됩니다.
이 경우까지 생각해서, 자기가 원하는 만큼의 메모리 만큼 비교 하고 싶다면,
memcmp()를 사용하세요. 반환값은 strcmp, strncmp와 같습니다.

아래는 위 함수 사용 예제입니다.

============== strlen 예제 =============
#include<iostream>
#include<cstring>
//예제는 C++로 구현.
using namespace std;

int main(){
  char aTemp1[100] = "I'm a programmer.";
  char *pTemp2 = "I'm a programmer.";
  char aTemp3[] = "C++ How To Program";

  cout<<sizeof(aTemp1)<<endl; //출력값 100  // 배열의 크기를 반환. 1byte * 100 = 100
  cout<<sizeof(pTemp2)<<endl; //출력값 4     // 포인터의 크기는 4byte
  cout<<sizeof(aTemp3)<<endl; //출력값 19 // 문자열의 길이 + 1 (18 + 1)
                 // 배열의 끝을 알려주는 것은 NULL 문자입니다.
                 // 따라서, 18개의 문자 배열에는 17개밖에 쓰지 못합니다.


  cout<<strlen(aTemp1)<<endl; //17 모두 실제 문자열의 길이값이 나옵니다.
  cout<<strlen(pTemp2)<<endl; //17 NULL문자를 제외한 배열의 길이입니다.
  cout<<strlen(aTemp3)<<endl; //18 글자의 길이
  return 0;
}

============== strcpy, strncpy 예제 =============

#include<iostream>
#include<cstring>
//저는 c++로 코딩합니다.
using namespace std;

int main(void){
  char arr1[100]="Hello? ";
  strcpy(arr1,"babo\n"); //\n는 캐리지 리턴, 엔터를 친 효과
  cout<<arr1<<endl;  //Hello? babo
  
  char arr2[100]="Hello? ";
  strncpy(arr2,"babo\n",5); //\n는 1바이트라서 5라 썼어요
  cout<<arr2<<endl;     //Hello? babo

  return 0;
}

============== strcpy, strncpy 예제 =============

#include<iostream>
#include<cstring>

using namespace std;

int main(){
  char string1[100]; //버퍼...
  char string2[100];


  strcpy(string1,"SOSAL); //string1 에다가 SOSAL 이란 문자열 (문자열은 " ~ ", 문자는 ' ')
  cout<<string1<<endl;    //을 복사하여 출력~

  strncpy(string1,"SOSAL",5); //string1 에다 SOSAL이란 문자열을 5개만큼 복사
  cout<<string2<<endl;         // 하여 출력
  return 0;
}

============== strcmp, strncmp 예제 =============

#include<iostream>      //문자열 비교함수 예제입니다.
#include<cstring>        //strcmp() 인자는 포인터나 주소값을 넣어줘야합니다.
using namespace std

void main(void){
     char *a="a";
     char *b="b";
     char *Sa="abcc";
     char *Sb="abcd";
     int ret;

     cout<<strcmp(a,b)<<strcmp(b,a)<<strcmp(a,a)<<endl;
          //우측이 크다면 -1 //좌측이 크다면 1  // 같다면 0을 리턴합니다.
          //배열이 끝날때까지 확인합니다.
     cout<<strncmp(Sa,Sb,4)<<strncmp(Sb,Sa,10)<<strncmp(Sa,Sa,10)<<endl;
          //우측이 크다면 -1 //좌측이 크다면 1  // 같다면 0을 리턴합니다.
}

============== strcat, strncat예제 =============

#include<iostream>      //문자열 비교함수 예제입니다.
#include<cstring> 
       //strcmp() 는 strcpy()를 이어쓰기로
using namespace std;  //실행한다고 생각하시면 됩니다.

void main(void){
     char arr[100] = "abracadabra";
     strcat(arr," Zzang!!");
     cout<<arr<<endl; // abracadabra Zzang!! 이 출력됩니다.
     strncat(arr," Zzang!!",5); //
     cout<<arr<<endl; // abracadabra Zzang!! Zzang 이 출력됩니다.
}