'C언어 > 함수설명&Tip' 카테고리의 다른 글
2010년 11월 22일 월요일 (struct(구조체)) (0) | 2010.11.22 |
---|---|
sizeof 연산자로 배열의 행과 열 크기를 알아내는 팁 (0) | 2010.11.18 |
[C] 문자열 조작 함수 (strlen, strcat, strcmp, strcpy) (0) | 2010.11.02 |
2010년 11월 22일 월요일 (struct(구조체)) (0) | 2010.11.22 |
---|---|
sizeof 연산자로 배열의 행과 열 크기를 알아내는 팁 (0) | 2010.11.18 |
[C] 문자열 조작 함수 (strlen, strcat, strcmp, strcpy) (0) | 2010.11.02 |
저수준 고수준 입출력 함수 분류표 (0) | 2010.12.13 |
---|---|
sizeof 연산자로 배열의 행과 열 크기를 알아내는 팁 (0) | 2010.11.18 |
[C] 문자열 조작 함수 (strlen, strcat, strcmp, strcpy) (0) | 2010.11.02 |
int main(int argc, char **argv) { int a[5][10]; printf("rows : %d\n",sizeof(a)/sizeof(a[0])); printf("cols : %d\n", sizeof(a[0])/sizeof(int)); return 0; }실행결과
$ ./sizeof rows : 5 cols : 10
저수준 고수준 입출력 함수 분류표 (0) | 2010.12.13 |
---|---|
2010년 11월 22일 월요일 (struct(구조체)) (0) | 2010.11.22 |
[C] 문자열 조작 함수 (strlen, strcat, strcmp, strcpy) (0) | 2010.11.02 |
표준 C 라이브러리에는 문자열에 관련된 다양한 함수를 제공한다.
여기서는 string.h 헤더 파일에 선언되어 있는 문자열 관련 함수들 중에서 일반적으로 사용 빈도가 높은 몇몇 함수들에 대해서 소개하겠다.
자주 쓰는 것으로는
(1) strlen() : 문자열의 길이
(2) strcat() / strncat() : 문자열의 결합
(3) strcmp() / strncmp() : 문자열의 비교
(4) strcpy() / strncpy() : 문자열의 복사
<strlen>
문자열의 길이를 가져오는 아주 유용한 녀석이다.
#include <stdio.h>
#include <string.h>
void main()
{
int length;
char arr[] = "Test";
length = strlen(arr);
printf("문자열의 길이 : %d\n",length);
}
Null을 제외하고 순수한 문자열의 길이를 가져온다. 이 점에 유의하자.
<strcat>
두 개의 문자열을 결합한다.
#include<stdio.h>
#include<string.h>
void main()
{
char buf[20]="superman";
char buf1[10]="&batman";
strcat(buf,buf1);
printf("%s\n",buf);
}
<strncat>
간단하다. 뒤에 숫자만 붙이면 된다.
n이 의미하는 바는 사용자가 원하는 길이만큼 복사해준다는 뜻이다.
strncat(첫번째 문자열, 두번째 문자열, 두번째 문자에서 원하는 길이)
#include<stdio.h>
#include<string.h>
void main()
{
char buf[20]="superman";
char buf1[10]="&batman";
strncat(buf,buf1,5);
printf("%s\n",buf);
}
그러면 5번째까지만 할 것이니까, &batm까지만 결합될 것이다.
<strcmp>
문자열 비교를 해준다.
#include<stdio.h>
#include<string.h>
void main()
{
char buf[20]="superman";
char buf1[10]="superwoman";
printf("%d\n",strcmp(buf,buf1));
}
같으면 0을 리턴해주고, 다른 경우에는 -1과 1을 리턴해주는데, 1과 -1의 차이는 이렇다.
-1 : 첫 번째 문자열이 두 번째 문자열보다 알파벳 순서로 앞에 올 경우 (ex) A와 B를 비교
-1 : 첫 번째 문자열이 두 번째 문자열보다 알파벳 순서로 뒤에 올 경우 (ex) B와 A를 비교
<strncmp>
역시 비교를 하긴 하는데 사용자가 원하는 길이, n만큼 비교를 하는 것이다.
#include<stdio.h>
#include<string.h>
void main()
{
char buf[20]="superman";
char buf1[10]="superwoman";
printf("%d\n",strncmp(buf,buf1,5));
}
strncmp(첫번째 비교대상, 두번째 비교대상, 두 문자열의 비교하고자 하는 길이)
<strcpy>
문자열을 복사하는 함수이다.
#include<string.h>
#include<stdio.h>
void main()
{
char buf[10]="superman";
char buf1[10];
strcpy(buf1,buf);
printf("%s\n",buf1);
}
<strncpy>
원하는 길이만큼 복사한다.
#include<string.h>
#include<stdio.h>
void main()
{
char buf[10]="superman";
char buf1[10];
strncpy(buf1,buf,5);
buf1[5]='\0'; //쓰레기 값을 초기화 시켜준다
printf("%s\n",buf1);
}
<문자 및 문자열에 관련된 그 밖에 함수들>
지금까지 문자열에 관련된 많은 함수를 보았다. 그러나 이것 이외에도 많은 양의 문자열 관련 함수들이 존재한다.
그 모든 것을 여기에 소개하는 것은 의미가 없다. 그렇다면 나머지 함수는 어떻게 공부해야 하는가?
이런 경우에 필요한 것이 레퍼런스(Reference)이다.
모든 함수들을 외우고 다닐 수도 없는 노릇이고, 또 어느 경우에 유용한 함수인지도 모르는 상태에서
무작정 함수만을 공부하는 것도 적절한 공부 방법이 아니다. (사실 이런 함수 공부보다 포인터 확실히 이해하는 것이 훨씬 낫다)
자주 쓰이지 않는 함수들은 필요한 경우에 참조해 볼 수 있으면 된다. 사실 찾는 것도 실력이다.
서점에서 적절한 C언어 레퍼런스를 하나 구입하자. 아주 중요한 사실이기에 말씀드리고 있는 것이다.
열혈강의 윤성우 저자는 'Prentice Hall'에서 출간한 'A Reference Manual'과 프리렉의 C Programming : 완벽가이드를 추천하고 있다.
<문자열을 숫자로 변환하는 함수들>
다음 함수들은 모두 인자로 문자열을 전달하면 해당 문자열을 숫자로 변환해서 리턴해 준다. 헤더 파일은 stdlib.h이다.
-------------------------------------------------------
int atoi(char *ptr); // 문자열을 int형 데이터로 변환
int atoi(char *ptr); // 문자열을 long형 데이터로 변환
double atof(char *str); // 문자열을 double형 데이터로 변환
-------------------------------------------------------
다음에 소개되는 예제는 숫자를 표현하는 두 개의 문자열을 정수형 데이터로 변환하여 덧셈을 하는 간단한 예제이다.
#include<stdio.h>
#include<stdlib.h>
void main()
{
char * str1 = "123";
char * str2 = "321";
printf("123+321 : %d", atoi(str1) + atoi(str2));
}
<대소문자의 변환을 처리하는 함수들>
-------------------------------------
#include<ctype.h>
int toupper(int c); // 소문자를 대문자로
int tolower(int c); // 대문자를 소문자로
-------------------------------------
다음 예제는 사용자로부터 입력받은 문자열 (길이가 30을 넘지 않는다고 가정)의 대소문자를 변환하는 예제이다.
즉 입력된 문자열이 "ABcd"라면 출력은 "abCD"가 되어야 한다.
#include<stdio.h>
#include<string.h>
#include<ctype.h>
void convert(char * str);
void main()
{
char str[30];
printf("Enter a string : ");
fgets(str, sizeof(str), stdin);
convert(str);
printf("convert sting : %s", str);
}
void convert(char * str)
{
int i;
for(i=0; i<strlen(str); i++)
{
if(str[i]>=65 && str[i]<=90)
str[i] = tolower(str[i]);
else if(str[i]>=97 && str[i]<=122)
str[i] = toupper(str[i]);
else
continue;
}
}
저수준 고수준 입출력 함수 분류표 (0) | 2010.12.13 |
---|---|
2010년 11월 22일 월요일 (struct(구조체)) (0) | 2010.11.22 |
sizeof 연산자로 배열의 행과 열 크기를 알아내는 팁 (0) | 2010.11.18 |