본문 바로가기
프로그래머의 길/C & C++

문자열 조작 함수

by 제이콥케이 2007. 3. 6.
반응형

문자열 조작 함수

문자열을 처리하는 함수로, string.h에 정의되어 있다.

strcpy
형식 : char *strcpy(char *string1, char *string2)
설명 : 문자열 string2를 string1으로 복사하는 함수

strerror
형식 : char *strerror(int errnum)
설명 : 주어진 에러 번호에 해당되는 에러 메시지를 가져오는 함수

strlen
형식 : int strlen(char *string)
설명 : 문자열의 길이를 구하는 함수 이때 NULL문자는 제외하고 길이를 구한다.

strncat
형식 : char *strncat(char *string1, char *string2, size_t n)
설명 : string2의 문자를 string1 끝에 붙이는 함수

strncmp
형식 : int strncmp(char *string1, char *string2, size_t n)
설명 : 두 문자열의 처음 n개의 문자를 비교하는 함수

strncpy
형식 : char *strncpy(char *string1, char *string2, size_t n)
설명 : string2의 처음 n개의 문자를 string1에 복사하는 함수

strnset
형식 : char *strnset(char *string, int c, size_t n)
설명 : 문자열의 처음 n개 문자를 c로 만드는 함수

strrchr
형식 : char *strrchr(char *string, int c)
설명 : 문자열에서 마지막에 나오는 문자 c를 찾는 함수 만약, 해당되는 문자가 발견되지 않은 경우에는 NULL을 반환한다.



strtok()

strtok(s1,"?");에서
s2 스트링에 있는 구분자(delimiter)로 s1 스트링을
token 단위로 나누어 준다. 그런데 이것을 한번 수행으로 다 하는 것이 아니라
매번 호출을 할때마다 그 다음 구분자가 나올때까지 자르기 때문에 사용법이 약간
어려운 것입니다.

즉, 처음 수행할때 s1에 구분자로 나눌 스트링을 넣고 두번째 수행부터는 s1에 NULL값을
넣음으로써 계속해서 구분자로 나누는 작업을 할 수 있게 된다.

 char munja[]="string,token,pro";
     char *p;
     
char *bb[3];
     int i=0,a;
 
     p = strtok (munja,",");
     bb[i]=p;
     while (p !=NULL)
     {
          i++;
         
 p = strtok (NULL,",");
          bb[i]=p;
     }
     for(a=0;a       printf("%s\n",bb[a]);


Find the next token in a string.
char *strtok( char *strToken, const char *strDelimit );
wchar_t *wcstok( wchar_t *strToken, const wchar_t *strDelimit );
unsigned char *_mbstok( unsigned char*strToken, const unsigned char *strDelimit );

Parameters

strToken
String containing token or tokens.
strDelimit
Set of delimiter characters.

예제)
// crt_strtok.c
/* In this program, a loop uses strtok
 * to print all the tokens (separated by commas
 * or blanks) in the string named "string".
 */

#include
#include

char string[] = "A string\tof ,,tokens\nand some  more tokens";
char seps[]   = " ,\t\n";
char *token;

int main( void )
{
   printf( "Tokens:\n" );
   /* Establish string and get the first token: */
   token = strtok( string, seps );
   while( token != NULL )
   {
      /* While there are tokens in "string" */
      printf( " %s\n", token );
      /* Get next token: */
      token = strtok( NULL, seps );
   }
}

결과 :
Tokens:
 A
 string
 of
 tokens
 and
 some
 more
 tokens

문자열 평가


header 파일 : ctype.h

① isalpha()
- 형식
int isalpha(c)

문자 c가 영문자 ('A'-'Z','a'-'z')인가를 판별하여 영문자이면 0이 아닌 숫자를 갖는다.

② isdigit()
int isdigit(c)
문자 c가 숫자('0'-'9')인지 판별하여 숫자이면 0이 아닌 숫자를 갖는다.

③ toupper()
문자를 대문자로 변환한다.

④ tolower()
문자를 소문자로 변환한다.

예제) 대문자를 소문자로 변환

#include<stdio.h>
#include<ctype.h>
main()
{
char str;
printf("문자를 입력하세요 [ ]\b\b");
scanf("%c",&str);

if(str >='A' && str <='Z')
{
printf ( tolower(str));
}
}


문자열 처리

헤더파일 - string.h
① strcat()
- 형식

char *strcat(char *str1, const char *str2)/

str1이 가리키는 문자열 뒤에 str2가 가리키는 문자열을 결합시킨다.
예제)
#include <stdio.h>
#include <string.h>
void main()
{
char str1[20];
char str2[20];
strcpy(str1,"2002");
strcpy(str2,"worldcup");
printf("%s\n", strcat(str1,str2));
}

② strupr()
-형식

char * strupr(*str1);
char * str1;

str1로 가리키는 문자열 중 소문자를 대문자로 변환시킨다.
반대되는 함수는 strlwr()

예)
#include<string.h>
#include<stdio.h>
main()
{
char * str="Visual C++";
char *cp;
cp=strupr(str);
printf("%s",cp);
}

③ strcmp()
- 형식

char * strcmp(const*str1,const *str2);

str1이 가리키는 문자열과 str2가 가리키는 문자열을 비교. 대 소문자 구분한다.
문자열 1= 문자열 2 0
문자열 1> 문자열 2 양수
문자열 1 < 문자열 2 음수

예제)
#include <string.h>
#include <stdio.h>
void main(void)
{
char *buf1 = "KOREA";
char *buf2 = "korea";
int result;
result=strcmp(buf2, buf1);
if (result!=0)
printf("buf1 and buf2 are not same by strcmp\n");
else
printf("buf1 and buf2 are same by strcmp\n");
result=stricmp(buf2, buf1); / * stricmp는 대소문자를 구분하지 않는다. */
if (result!=0)
printf("buf1 and buf2 are not same by stricmp\n");
else
printf("buf1 and buf2 are same by stricmp\n");
}

반응형