원형( prototype ) :
char *strcpy(char *dest, const char *src);
설명 : src가 지시하는 문자열을 dest라는 포인터가 지시하는 공간에 복사하고
그 결과 문자열 dest을 리턴합니다..
예 : char newstr[32];
char oldstr[] = "coffee";
strcpy( newstr, oldstr );
결과 : newstr -> "coffee"
2. strcat(...)
원형( prototype )
char *strcat(char *dest, const char *src);
설명 : src가 지시하는 문자열(src 문자열 )을 dest가 지시하는 문자열의
끝에 덧 붙이고 결과를 리턴합니다.
예 : char str1[] = "abc";
char str2[] = "def";
strcat( str1, str2 );
결과 : str1 -> "abcdef"
3. strcmp(..)
원형( prototype)
int strcmp(const char *s1, const char *s2);
설명 : 문자열 s1과 s2를 사전식( 오름차순 )으로 비교하여 결과를 리턴합니다.
예 : char str1[] = "big";
char str2[] = "bigger";
int result;
result = strcmp( str1, str2 );
result 가 0 이면 str1과 str2가 같은 문자열
result가 양수이면 str1이 str2보다 크다 ( str1이 str2의 뒤에 위치 )
result가 음수이면 str1이 str2보다 작다 ( str1이 str2보다 앞선다 )
"big"과 "bigger"의 비교
"big" "bigger"
'b' 'b'
'i' 'i'
'g' 'g'
'\0' 'g'
최초로 일치하지 아니하는 문자의 차(difference)를 strcmp의 결과로 리턴합니다.
'\0' - 'g' => 0 - 103 = -103를 리턴
*/
#include <stdio.h>
#include <stdlib.h>
/*
사용자가 정의함수( user defined function )
함수의 원형( 프로토 타입 = prototype )을 선언합니다.
표준함수와 구별하기 위하여 앞에 "my"라는 접두어를 붙였습니다.
파라메타의 형에 const라는 modifier(수정자)를 붙인 것은 함수를 정의할 때
문자열을 수정하지 않는다는 의미입니다. */
/* 문자열 복사함수 */
char* mystrcpy( char* dest, const char* src );
/* 문자열 덧붙이기 함수 */
char* mystrcat( char* dest, const char* src );
/* 문자열 비교함수 */
int mystrcmp( const char* s1, const char* s2 );
int main(void)
{
/* 두개의 문자배열을 선언 */
char first[255], second[255], copy[255];
int query, result;
printf( "두개의 문자열을 입력하여 \n함수 mystrcat(..과 mystrcmp(..를 테스트합니다.\n" );
while( 1 )
{
printf( "\n첫번째 문자열 >> " );
scanf( "%s", first );
fflush( stdin );
printf( "두번째 문자열 >> " );
scanf( "%s", second );
fflush( stdin );
/* 복사 테스트 - mystrcpy */
mystrcpy( copy, first );
printf( "복사된 첫번째 문자열은 %s입니다.\n", first );
mystrcpy( copy, second );
printf( "복사된 두번째 문자열은 %s입니다.\n", second );
system( "pause" );
/* 비교 테스트 - mystrcmp */
result = mystrcmp( first, second );
printf( "\n" );
if( result == 0 )
printf( "두 문자열 %s와 %s는 같은 문자열입니다\n", first, second );
else if( result < 0 )
printf( "문자열 %s는 문자열 %s보다 앞 섭니다\n", first, second );
else
printf( "문자열 %s는 문자열 %s의 뒤에 위치합니다\n", first, second );
system( "pause" );
/* 덧붙이기 테스트 - mystrcat */
printf( "\n문자열 %s에 ", first );
mystrcat( first, second );
printf( "%s를 덧 붙이면 문자열 %s가 생성됩니다.\n", second, first );
printf( "\n종료하시려면 'Q'나 'q'를 계속하시려면 그 밖의 아무 키나 누르세요 >> " );
query = getchar();
if( query == (int)'Q' || query == (int)'q' )
{
printf( "프로그램을 종료합니다\n" );
break;
}
}
return 0;
}
char* mystrcpy( char* dest, const char* src )
{
int i = 0, j = 0;
/*
src 문자열의 요소문자(src[i])가
끝의 널문자('\0')에 도달하지 아니한 동안 복사합니다.*/
while( src[i] != '\0' )
dest[j++] = src[i++];
dest[j] = '\0';
return dest;
/*
// 보다 빠른 소스
// dest라는 포인터는 유지하고
// p에 dest를 저장한 후 p를 이동하면서 조작
char* p = dest;
while( *src )
*p++ = *src++;
*p = '\0';
return dest;
*/
}
char* mystrcat( char* dest, const char* src )
{
int i = 0, j = 0;
char* p = dest;
while( p[i] != '\0' ) i++;
while( src[j] != '\0' )
p[i++] = src[j++];
p[i] = '\0';
return dest;
/*
// 보다 빠른 소스
// dest라는 포인터는 유지하고
// p에 dest를 저장한 후 p를 이동하면서 조작
char* p = dest;
/* 포인터를 문자열 dest의 끝으로 이동시킵니다. */
while( *p ) p++;
while( *src )
*p++ = *src++;
*p = '\0';
return dest;
*/
}
int mystrcmp( const char* s1, const char* s2 )
{
/*
s1이 지시하는 문자가 널문자가 아닌 동안 비교
s2가 지시하는 문자가 널문자인 경우는 아래 if문에서 catch됩니다. */
while( *s1 )
{
if( *s1 != *s2 )
break;
s1++;
s2++;
}
return (*s1 - *s2);
}
'C & C++ > C & C++' 카테고리의 다른 글
rand() 함수 (0) | 2010.04.26 |
---|---|
문장에서 문자수 계산하는 프로그램 (0) | 2009.12.18 |
stdafx.h (0) | 2009.12.18 |
(교재) C 예제들 (0) | 2009.10.31 |
(교재) 열혈강의 C (0) | 2009.10.31 |
댓글