본문 바로가기

C언어

문자열관련 예제

051.문자 입력하기 getch()

키보드로부터 문자를 한 개 입력 받는다.

getch()를 통해 문자를 입력받을 때F1, F2,Ctrl+a~Ctrl+z, Home,End, PgUp, PgDn, 방향키 등의 특수키를 입력받는경우두 번에 걸쳐 키 값을 읽어온다.

#include <conio.h>

int getch(void);

예제-051.c

#include <stdio.h>
#include <conio.h>

#define ENTER 13

void main(void)
{
int ch;

printf("아스키 코드로 변환할 키를 누르세요...\n");
printf("Enter 키를 누르면 프로그램은 종료됩니다.\n");

do
{
ch = getch();
printf("문자 : (%c), 아스키 코드 = (%d)\n", ch, ch);
}while(ch != ENTER);
}

052. 문자 출력하기putch()

키보드로부터 입력받은 문자를 출력한다.

#include <conio.h>

intputch(int ch);

예제-052.c

#include <stdio.h>
#include <conio.h>

int print(char *string);

void main(void)
{
print("This is a putch function!");
}

int print(char *string)
{
int len = 0;

while(*string != (char)NULL)
{
putch(*string);
*string++;
len++;
}

putch('\r');
putch('\n');

return len;
}

053.정수값 입력 받기 scanf()

정수 값 or 문자열을 입력 받는다.

#include <stdio.h>

int scanf(const char *format [, argument]...);

정수 값을 입력 받을때는 번지 지정 연산자(&)를 이용한다.

intp;

scanf("%d",&p);

문자열을 입력 받을 때는 번지지정 연산자가 필요없다.

char str[10];

scanf("%s",str);

예제-053.c

#include <stdio.h>

void main(void)
{
int count;
int tmp;
int total = 0;

for(count=1;count<=3;count++)
{
printf("%d번째 정수값을 입력한 후 Enter키를 누르세요.\n", count);

scanf("%d", &tmp);

total += tmp;

printf("입력 값 = %d, 총합 = %d\n", tmp, total);
}

printf("읽은 정수의 총 합은 %d입니다.\n", total);
}

054. 정수값 출력하기 printf()

#include <stdio.h>

int printf(constchar *format [, argument]...);

출력인자의 갯수가 고정이 아닌가변적이기 때문에[,argument]... 처럼선언.

왼쪽정렬은 '-'기호를사용한다.

printf("[%-10d]\n",100); // 왼쪽정렬이면서 자리수가 최소 10자리가 되도록 설정

가변인자를 사용하는 함수를 만들어printf() 기능 구현

#include<stdarg.h>

void var_print(char *format, ...)

{

char buf[1024];

va_list arglist;

va_start(arglist, format);

vsprintf(buf, format,arglist);

va_end(arglist);

printf(buf);

}

예제-054.c

#include <stdio.h>

void main(void)
{
int i = 100;
int j = 1000;
int k = 12345;

printf("[%d]\n", i);
printf("[%d]\n", j);
printf("[%d]\n", k);

printf("[%5d]\n", i);
printf("[%5d]\n", j);
printf("[%5d]\n", k);

printf("[%10d]\n", i);
printf("[%10d]\n", j);
printf("[%10d]\n", k);

printf("[%-10d]\n", i);
printf("[%-10d]\n", j);
printf("[%-10d]\n", k);
}

055.문자열 입력 받기 gets()

#include <stdio.h>

char*gets(char *buffer);

문자열 입력받기.

번지 지정 연산자(&) 사용 안한다.

예제-055.c

#include <stdio.h>

int count(char *str);

void main(void)
{
char string[100];
char *ret;

ret = gets(string);

if(ret != NULL) {
printf("문자 'a'의 갯수는 %d개 입니다.\n", count(string));
}
}

int count(char *str)
{
int cnt = 0;

while(*str != (char)NULL)
{
if(*str++ == 'a') cnt++;
}

return cnt;
}

056.문자열 출력하기 puts()

#include <stdio.h>

int puts(const char *string);

인수로 넘겨주는 문자열은 puts() 함수 내부적으로 문자열 상수처럼 사용되기 때문에, puts() 함수 실행 후에도변하지 않는다.

출력 시에 자동으로 다음 줄로 개행한다.

예제-056.c

#include <stdio.h>

#define KOREA "대한민국"
#define SUMMER "여름"

void main(void)
{
const char *winter = "겨울";

puts(KOREA);
puts(SUMMER);
puts(winter);
}

057. 문자열 복사하기 strcpy(), strncpy(), strdup()

#include <string.h>

char *strcpy(char *dist, const char *src);

문자열을 부분적으로 복사하려면,strncpy()을 사용한다.

#incude<string.h>

int strncpy(char *string1,const char *string2,unsigned int count);

메모리할당을 하면서 문자열을 복사,strdup()

#include <string.h>

cha *strdup(const char *str);

문자열을 복사할 공간을 확보하기 위해 내부적으로malloc()을 호출하는 것을 제외하고는 strcpy()와 동일하다.

따라서,반드시 free()를 이용하여 메모리를 해제 해주어야 한다.

예제-057.c

#include <stdio.h>
#include <string.h>

#define KOREA "대한민국"

void main(void)
{
char *string1;
char string2[100];

//strcpy(string1, KOREA);
string1 = KOREA;
strcpy(string2, KOREA);
strcpy(string2, "봄");

puts(string1);
puts(string2);
}

058.문자열을 복사하는 함수 만들기

#include <stdio.h>

#define KOREA "대한민국"

char *My_strcpy(char *dest, const char *src);

void main(void)
{
char string[100];

My_strcpy(string, KOREA);

puts(string);
}

char *My_strcpy(char *dest, const char *src)
{
if(dest == (int)NULL || src == (int)NULL)
{
if(*dest != (int)NULL) *dest = (int)NULL;
return NULL;
}

do
{
*dest++ = *src;
}while(*src++ != (int)NULL);

return dest;
}

059. 문자열을 대, 소문자로 구분하여 비교하기 strcmp()

#include <string.h>

int strcmp(const char *src1,const char *src2);

-1 : 문자열이 작은 경우

0 : 문자열 일치

1 : 문자열이 클경우

문자열의 대, 소문자를 구분하여 비교.

대, 소문자 구분없이 비교하려면, _stricmp()을 사용한다.

#include <string.h>

int_stricmp(const char *src1, const char *src2);

예제-059.c

#include <stdio.h>
#include <string.h>

#define SKY "sky"

void main(void)
{
char string[100];
int ret;

printf("영단어를 입력한 후 Enter키를 치세요.\n");
printf("sky를 입력하면 프로그램이 종료됩니다.\n");

do
{
gets(string);

ret = strcmp(string, SKY);

if(ret == 0)
{
printf("%s == %s, ret = %d \n", string, SKY, ret);
break;
}
else if(ret < 0)
printf("%s < %s, ret = %d \n", string, SKY, ret);
else
printf("%s > %s, ret = %d \n", string, SKY, ret);
} while(1);
}

060. 문자열을 비교하는함수 만들기

#include <stdio.h>

#define SKY "sky"

int My_strcmp(const char *string1, const char *string2);

void main(void)
{
char string[100];
int ret;

printf("영단어를 입력한 후 Enter키를 치세요.\n");
printf("sky를 입력하면 프로그램이 종료됩니다.\n");

do
{
gets(string);

ret = My_strcmp(string, SKY);

if(ret == 0)
{
printf("%s == %s, ret = %d \n", string, SKY, ret);
break;
}
else if(ret < 0)
printf("%s < %s, ret = %d \n", string, SKY, ret);
else
printf("%s > %s, ret = %d \n", string, SKY, ret);
} while(1);
}

int My_strcmp(const char *string1, const char *string2)
{
if(*string1 == (int)NULL && *string2 == (int)NULL) return 0;

while(*string1 != (int)NULL)
{
if(*string2 == (int)NULL) return 1;

if(*string1 == *string2)
{
*string1++;
*string2++;
continue;
}

if(*string1 < *string2) return -1;
else return 1;
}

if(*string2 != (int)NULL) return -1;

return 0;
}

061.문자열을 일정크기만큼 비교하기 strncmp()

문자열의 특정길이 만큼만비교한다. 그 외에는 strcmp()와동일. 대, 소문자 구분.

#include <stdio.h>

int strncmp(const char* src1,const char *src2,unsignedint count);

대,소문자 구분없이비교하려면, _strnicmp()을사용한다.

int _strnicmp(const char *string1,const char *string2,unsigned int count);

예제-061.c

#include <stdio.h>
#include <string.h>

#define SKY "sky"

void main(void)
{
char string[100];
int ret;

printf("영단어를 입력한 후 Enter키를 치세요!\n");
printf("sky로 시작되는 단어를 입력하면 프로그램이 종료됩니다.\n");

do
{
gets(string);
ret = strncmp(string, SKY, 3);

if(ret == 0)
{
printf("%3.3s == %s, ret = %d \n", string, SKY, ret);
break;
}
else if(ret < 0)
printf("%s < %s, ret = %d \n", string, SKY, ret);
else
printf("%s > %s, ret = %d \n", string, SKY, ret);
} while(1);
}

062. 문자열 연결하기 strcat(), strncat()

#include <string.h>

char *strcat(char *dest, const char *src);

문자열은dest 문자열에 추가되기 때문에 dest 버퍼는 src 문자열을 추가할 만큼의 충분한 버퍼가 있어야 한다.

문자열을 부분적으로 연결하려면,strncat()을 사용한다.

#include<string.h>

char*strncat(char *dest, const char *src,unsigned int count);

예제-062.c

#include <stdio.h>
#include <string.h>

void main(void)
{
char string1[100];
char string2[100];

printf("첫 번째 단어를 입력하세요!\n");
gets(string1);

printf("두 번째 단어를 입력하세요!\n");
gets(string2);

strcat(string1, string2);
puts(string1);
}

063.문자열의 길이구하기strlen()

#include<string.h>

unsigned int strlen(const char *string);

예제-063.c

#include <stdio.h>
#include <string.h>

void main(void)
{
char string[200];

printf("문장을 입력한 후, Enter 키를 치세요.\n");
printf("아무것도 입력하지 않으면 프로그램은 종료됩니다.\n");

do
{
gets(string);
if(!strlen(string)) break;
printf("문자열의 길이는 %d입니다.\n", strlen(string));
}while(1);
}

064. 문자열 검색하기 strstr()

#include <string.h>

char *strstr(const char *string, const char *strCharSet);

문자열이 검색된 경우, 찾은 위치에 대한 메모리 번지를 반환하는데, 이 반환 값은 하상 문자 배열 변수 string이 가리키는 번지보다 크거나 같다.

따라서,검색 문자열이 몇 번째 위치에서 검색되었는지는 검색된 번지와 문자열의시작 번지로 구할 수 있다.

예제-064.c

#include <stdio.h>
#include <string.h>

#define SKY "sky"

void main(void)
{
char string[100];
char *ret;

puts("문자열을 입력한 후 Enter키를 치세요!");
puts("문자열 중에 sky가 포함되어 있으면, 프로그램은 종료됩니다.");

do
{
gets(string);
ret = strstr(string, SKY);

if(ret == NULL)
{
puts("문자열 중에 sky가 없습니다.");
}
else
{
printf("%d 위치에서 sky 문자열을 찾았습니다.\n", ret-string);
break;
}
}while(1);
}

065. 문자열 중에서 문자 검색하기 strchr(), strrchr()

#include<string.h>

char *strchr(const char* striing, intc);

뒤에서부터 검색

#include<string.h>

char *strrchr(const char *string, int c);

문자가 검색된 경우, 찾은 위치에 대한 메모리 번지를 반환하는데, 이 반환 값은 하상 문자 배열 변수 string이 가리키는 번지보다 크거나 같다.

따라서,검색 문자가 몇 번째 위치에서 검색되었는지는 검색된 번지와 문자열의시작 번지로 구할 수 있다.

예제-065.c

#include <stdio.h>
#include <string.h>

#define FIND_CHAR 'h'

void main(void)
{
char string[100];
char *ret;

puts("문자열을 입력한 후 Enter키를 치세요!");
puts("문자열 중에 'h'가 포함되어 있으면, 프로그램은 종료됩니다.");

do
{
gets(string);

ret = strchr(string, FIND_CHAR);

if(ret == NULL)
{
puts("문자열 중에 'h'가 없습니다.");
}
else
{
printf("%d 위치에서 'h' 문자를 찾았습니다.\n", ret-string);
break;
}
}while(1);
}

066. 문자열 중에서 일치되는 첫 문자의 위치 구하기 strcspn()

#include <string.h>

unsigned int strcspn(const char*string,const char *strCharSet);

문자열or 문자 검색 함수에서검색된 번지와 문자열의 시작번지를 통해 구했던 검색 문자의 위치를 strcspn()으로 간단하게 구할 수 있다.

예제-066.c

067.문자열 중에서 일치되지 않는첫 문자의 위치 구하기strspn()

#include <string.h>

unsigned int strspn(const char *string, constchar *strCharSet);

예제-067.c

#include <stdio.h>
#include <string.h>

void main(void)
{
char *string = "this is a very good!";
char *strCharSet = "abcdefghijklmnopqrstuvwxyz "; // 주의 : 공백포함
unsigned int pos;

pos = strspn(string, strCharSet);

puts("0 1 2 3");
puts("0123456789012345678901234567890");
puts(string);
puts(strCharSet);

printf("%d 위치에서 일치되지 않는 문자를 발견했습니다.\n", pos);
}

068.문자열을 구분자로 분리하기1strtok()

#include <string.h>

char *strtok(char*strToken, constchar *strDelimit);

strtok() 함수는 내부적으로 이전에검색한 위치를 저장한다.

따라서,string이 NULL을 strtok() 함수에 넘겨주면, 검색된 다음 위치부터 자동으로 검색한다.

예제-068.c

#include <stdio.h>
#include <string.h>

#define TOKEN " "

void main(void)
{
char string[100];
char *token;

puts("문자열을 입력한 후 Enter키를 치세요!");
gets(string);
token = strtok(string, TOKEN);

while(token != NULL)
{
puts(token);
token = strtok(NULL, TOKEN);
}
}

069.문자열을 구분자로 분리하기2 strpbrk()

#include <string.h>

char *strtok(char *strToken, const char *strDelimit);

예제-069.c

#include <stdio.h>
#include <string.h>

#define TOKEN " "

void main(void)
{
char string[100];
char *pos;

puts("문자열을 입력한 후 Enter키를 치세요!");
gets(string);
pos = strpbrk(string, TOKEN);

while(pos != NULL)
{
puts(pos++);
pos = strpbrk(pos, TOKEN);
}

}

공백을 찾은 경우, 공백이 있는 자리에 대한 번지를 반환한다.

strtok()와 strpbrk() 함수는 문자열을 구분하는 방법의 차이가 있으니구분해서 사용해야 한다.

070. 문자여을 특정 문자로 채우기strset()

#include<string.h>

char *strset(char*string, int c);

string은 채울 버퍼이며, c는 채울 문자이다.

strset()은 string에서 널 문자를제외한 모든 문자를c로 변경한다.

예제-070.c

#include <stdio.h>
#include <string.h>

void main(void)
{
char string[100];

puts("문자열을 입력한 후 Enter키를 치세요!");
puts("아무 문자도 입력하지 않으면 프로그램은 종료됩니다!");

do
{
gets(string);
if(!strlen(string)) break;

strset(string, string[0]);
puts(string);
}while(1);
}

071.부분 문자열을 특정 문자로 채우기 strnset()

#include <string.h>

char *strnset(char *string, intc, unsigned int count);

string은 채울 버퍼이며, c는 채울 문자익, count는 채울 문자의 수이다.

strnset()은 string의 처음부터 count의 수만큼c로 변경한다.

count의 값이 strlen(string)보다 크거나 같다면strnset()은 string에 포함되어 있는모든 문자를 변경합니다.

예제-071.c

#include <stdio.h>
#include <string.h>

void main(void)
{
char string[100];

puts("문자열을 입력한 후 Enter키를 치세요!");
puts("아무 문자도 입력하지 않으면 프로그램은 종료됩니다!");

do
{
gets(string);
if(!strlen(string)) break;

strnset(string, '*', 5);
puts(string);
}while(1);
}

072. 문자열을 대문자로 변환하기 strupr()

#include <string.h>

char *strupr(char *string);

string은 반드시 문자열 버퍼이거나 문자열 버퍼를 가리키는 포인터이어야한다.

만약, 문자열 상수 등을string에 사용한다면 메모리 에러가 발생되면서 프로그램은 다운될 수 있다.

예를 들어, char *str;이라고 정의한 후 strupr(str)이라고 사용할 수는 없다.

예제-072.c

#include <stdio.h>
#include <string.h>

void main(void)
{
char string[100];

puts("문자열을 입력한 후 Enter키를 치세요!");
puts("아무 문자도 입력하지 않으면 프로그램은 종료됩니다!");

do
{
gets(string);
if(!strlen(string)) break;

strupr(string);
puts(string);
}while(1);
}

073.문자열을 소문자로 변환하기

#include <string.h>

char *strlwr(char *string);

예제-073.c

#include <stdio.h>
#include <string.h>

void main(void)
{
char string[100];

puts("문자열을 입력한 후 Enter키를 치세요!");
puts("아무 문자도 입력하지 않으면 프로그램은 종료됩니다!");

do
{
gets(string);
if(!strlen(string)) break;

strlwr(string);
puts(string);
}while(1);
}

074.문자열을 거꾸로 뒤집기 strrev()

#include <string.h>

char *strrev(char *string);

예제-074.c

#include <stdio.h>
#include <string.h>

void main(void)
{
char string[100];

puts("문자열을 입력한 후 Enter키를 치세요!");
puts("아무 문자도 입력하지 않으면 프로그램은 종료됩니다!");

do
{
gets(string);
if(!strlen(string)) break;

strrev(string);
puts(string);
}while(1);
}

075.문자열을 중복 생성하기 strdup()

#include <string.h>

char *strdup(const char *string);

strdup() 함수는 내부적으로 메모리를 할당하는malloc() 함수를 사용한다.

프로그램 도중에잠깐 임시 버퍼가 필요할 때 사용할 수 잇다.

malloc()함수에의해 할당된 메모리는반드시 free() 함수에 의해 해제되어야 한다.

예제-075.c

#include <stdio.h>
#include <string.h>
#include <malloc.h>

void main(void)
{
char string[100];
char *pstr;

puts("문자열을 입력한 후 Enter키를 치세요!");
puts("아무 문자도 입력하지 않으면 프로그램은 종료됩니다!");

do
{
gets(string);
if(!strlen(string)) break;

pstr = strdup(string);
strcpy(string, "temporary string");

printf("문자열 string : %s\n", string);
printf("문자열 pstr : %s\n", pstr);

free(pstr);
}while(1);
}

076.문자열을 형식화하기 sprintf()

#include <stdio.h>

int sprintf(char *buffer, const char *format[,argument]...);

sprintf() 함수는printf() 함수와 사용 방법이 같다.

단지, printf() 함수는 화면에 출력할때 사용하며,sprintf() 함수는 버퍼에 형식화된 문자열을 생성할때 사용한다.

예제-076.c

#include <stdio.h>

void main(void)
{
char cValue = 'a';
int iValue = 1234567;
long lValue = 7890123;
float fValue = 3.141592;
double dValue = 3.141592;
char *string = "korea";
char buffer[100];

sprintf(buffer, "char 형은 : %c", cValue);
puts(buffer);

sprintf(buffer, "int 형은 : %d", iValue);
puts(buffer);

sprintf(buffer, "long 형은 : %ld", lValue);
puts(buffer);

sprintf(buffer, "float 형은 : %f", fValue);
puts(buffer);

sprintf(buffer, "double 형은 : %e", dValue);
puts(buffer);

sprintf(buffer, "char* 형은 : %s", string);
puts(buffer);
}

077.문자열을 정수로 변환하기1atoi()

#include <stdlib.h>

int atoi(const char *string);

변환 가능한 문자열은 공백, 탭, 기호(+,-) 그리고 숫자뿐이다.

예제-077.c

#include <stdio.h>
#include <stdlib.h>

void main(void)
{
int count;
int total = 0;
char string[100];

for(count=1;count<=3;count++)
{
printf("%d 번째 문자열을 입력한 후 Enter키를 누르세요.\n", count);

gets(string);
total += atoi(string);

printf("입력 값 = %d, 총 합 = %d\n", atoi(string), total);
}

printf("읽은 문자열의 총 합은 %d입니다.\n", total);
}

078.문자열을 정수로 변환하기2 atol()

#include <stdlib.h>

long atol(const char *string);

atoi() 함수와 사용법이 동일.단지, 반환 값이 long형이라는 점이 다르다.

079. 문자열을 정수로 변환하기3 strtol()

#include <stdlib.h>

long strtol(const char *string, char**stop, int radix);

strtol() 함수는atoi(), atol() 함수와는 달리, 기수라는 것이 존재한다.

기수라는 것은 10진수, 2진수, 8진수, 16진수 등과 같이 각 진수의 기본이 되는 수를 말한다. radix를 통해변경할 수 있다.

radix의 값을 2로 하면 2진수 문자열을10진수로, 8로하면8?진수 문자열을 10진수로 변환할 수 있다.

예제-079.c

#include <stdio.h>
#include <stdlib.h>

void main(void)
{
char *string = "0xFF";
char *stop;
int radix;
long value;

radix = 16;
value = strtol(string, &stop, radix);

printf("%d 개의 문자가 변환 되었습니다.\n", stop-string);
printf("16진수 %s를 숫자로 변환하면 %ld입니다.\n", string, value);
}

080.문자열을 정수로 변환하기4 strtoul()

#include <stdlib.h>

unsigned long strtoul(const char *string, char **stop, int radix);

strtol() 함수와 사용법이같다. 단지,반환 값이 unsignedlong(%u)형이라는 점이 다르다.

081.문자열을 실수로 변환하기1 atof()

#include <stdlib.h>

double atof(const char *string);

변환 가능한 문자열은 공백, 탭, 기호(+,-), 숫자, 소수점 그리고지수(d,D,e, E) 뿐이다.

최대 100자리의 문자열을 숫자로 변환 할 수 있다.

사용법은 atoi()와 동일하면, 반환 값이 double형(%lf)이라는 점이 다르다.

082.문자열을 실수로 변환하기2 strtod()

#include <stdlib.h>

doublestrtod(const char *string, char **stop);

string은 지수가 포함된 문자열이며, stop은 변환이 되다가 멈춰진 위치의 포인터 값.

atof() 함수와 비슷한기능.

예제-082.c

#include <stdio.h>
#include <stdlib.h>

void main(void)
{
char *string = "1.234E-10";
char *stop;
double value;

value = strtod(string, &stop);

printf("%d 개의 문자가 변환되었습니다.\n", stop-string);
printf("문자열 [%s]를 숫자로 변환하면 %E입니다.\n", string, value);
}

083. 정수를 문자열로 변환하기1 itoa()

#include<stdio.h>

char*itoa(int value, char*string, int radix);

value는 변환될 숫자값,string은 변환될 숫자가 저장될 버퍼,radix는 몇 진수 문자열의 형태로 저장할 지를 지정

예제-083.c

#include <stdio.h>
#include <stdlib.h>

void main(void)
{
int value;
char string[100];
int radix;

radix = 10;

value = 5;
itoa(value, string, radix);
printf("변환된 문자열은 %s입니다.\n", string);

value = -12345;
itoa(value, string, radix);
printf("변환된 문자열은 %s입니다.\n", string);
}

084.정수를 문자열로 변환하기2 ltoa()

#include<stdlib.h>

char *ltoa(long value,char *string, int radix);

itoa()와 동일한 기능.

예제-084.c

#include <stdio.h>
#include <stdlib.h>

void main(void)
{
int value;
char string[100];
int radix;

radix = 2;

value = 12345;
ltoa(value, string, radix);
printf("변환된 문자열은 %s입니다.\n", string);

value = -12345;
ltoa(value, string, radix);
printf("변환된 문자열은 %s입니다.\n", string);
}

085. 정수를 문자열로 변환하기3 ultoa()

#include <stlib.h>

char *ultoa(unsigned long value, char *string, int radix);

itoa()와 유사한 기능.

예제-085.c

#include <stdio.h>
#include <stdlib.h>

void main(void)
{
int value;
char string[100];
int radix;

radix = 16;

value = 34567;
itoa(value, string, radix);
printf("변환된 문자열은 %s입니다.\n", string);

value = 1234567890;
itoa(value, string, radix);
printf("변환된 문자열은 %s입니다.\n", string);
}

086. 실수를 문자열로 변환하기1fcvt()

#include <stdlib.h>

charfcvt(double value, int count, int *dec,int *sign);

value는 변환될 실수값,count는 소수점 이하 몇 자리까지 문자열로 변환할 지를 지정

dec는 변환된 문자열의 몇 번째가 소수점의 위치인가를 표시(보통1)

sign은 0이면 양수값으로 변환,1이면 음수값으로변환

실수값을 문자열로 변환하여 내부적인 기억 공간에 별도로 저장하며, 그 별도로 저장된 공간의 메모리 주소를 반환

예제-086.c

#include <stdio.h>
#include <stdlib.h>

void main(void)
{
double value;
char *pstr;
int dec, sign;

value = 3.1415926535;
pstr = fcvt(value, 6, &dec, &sign);

printf("변환된 문자열은 %s입니다.\n", pstr);
printf("소수점의 위치는 %d, 부호는 %d입니다.\n", dec, sign);

value = -3.1415926535;
pstr = fcvt(value, 8, &dec, &sign);
printf("변환된 문자열은 %s입니다.\n", pstr);
printf("소수점의 위치는 %d, 부호는 %d입니다.\n", dec, sign);
}

087.실수를 문자열로 변환하기2ecvt()

#include <stdlib.h>

char *ecvt(double value, int count, int *dec, int *sign);

value는지수가 포함된 실수값, count는 총몇 자리만큼의 문자열로 생성할 것인가를 지정

dec는 변환된 문자열의 몇 번째가 소수점의 위치인가를 표시(보통1)

sign은0이면 양수값, 1이면 음수값으로 변환

fcvt()와 동일하게 내부적인 공간을 사용하며, 그 공간의 메모리 주소를 반환

#include <stdio.h>
#include <stdlib.h>

void main(void)
{
double value;
char *pstr;
int dec, sign;

value = 3.14e10;
pstr = ecvt(value, 3, &dec, &sign);

printf("변환된 문자열은 %s입니다.\n", pstr);
printf("소수점의 위치는 %d, 부호는 %d입니다.\n", dec, sign);

value = -3.14e10;
pstr = ecvt(value, 3, &dec, &sign);
printf("변환된 문자열은 %s입니다.\n", pstr);
printf("소수점의 위치는 %d, 부호는 %d입니다.\n", dec, sign);
}

fcvt()와 ecvt() 함수는 변환된 문자열을 기억하는 메모리를 공유하므로,

두함수를 연속적으로 사용하는 경우에 이전의 값이 바뀌어지므로 주의해야 한다.

088. 실수를 문자열로 변환하기3 gcvt()

#include <stdlib.h>

char*gcvt(double value, int digits, char*buffer);

value는 지수가 포함된 실수값,digits는 지수를 문자열로 변환 시몇 바이트를 의미 있는 숫자로 변환할 것인지를 지정

buffer는 변환된 value값이 저장됨

예제-088.c

#include <stdio.h>
#include <stdlib.h>

void main(void)
{
double value;
char buffer[100];

value = 3.14e10;
gcvt(value, 3, buffer);

printf("변환된 문자열은 %s입니다.\n", buffer);

value = -3.14e10;
gcvt(value, 3, buffer);

printf("변환된 문자열은 %s입니다.\n", buffer);
}

ecvt()나fcvt() 함수와 달리, 소수점 및 부호를 생성한다. 따라서, 소수점의 위치 및 부호 값을 전달받는 포인터는 사용하지 않는다.

sprintf()함수를사용하면 실수를 문자열로 좀 더 편리하게 변환할 수 있다.

floatfFloat= 3.141592f;

double dDouble = 3.141592e+123;

char buffer[100];

sprintf(buffer, "%f\n", fFloat);

printf(buffer);// 3.141592

sprintf(buffer, "%e\n", dDouble);

printf(buffer); // 3.141592e+123

sprintf(buffer, "%g\n", dDouble);

printf(buffer); // 3.14159e+123

089. 문자가 알파벳인지 검사하기isalpha()

#include <ctype.h>

int isalpha(int c);

대소문자를 가리지 않는다.

예제-089.c

#include <stdio.h>
#include <ctype.h>

void main(void)
{
char *string = "Cat 1 Car 2 Cow 3...";
char buffer[100] = {0,};
int cnt = 0;

while(*string)
{
if(isalpha(*string))
{
buffer[cnt++] = *string;
}

string++;
}

puts(buffer);
}

090.문자가 숫자인지 검사하기 isdigit()

#include <ctype.h>

int isdigit(int c);

예제-090.c

#include <stdio.h>
#include <ctype.h>

void main(void)
{
char *string = "Cat 1 Car 2 Cow 3...";
char buffer[100] = {0,};
int cnt = 0;

while(*string)
{
if(isdigit(*string))
{
buffer[cnt++] = *string;
}

string++;
}

puts(buffer);
}

091.문자가 알파벳 또는 숫자인지 검사하기 isalnum()

#include<ctype.h>

int isalnum(int c);

예제-091.c

#include <stdio.h>
#include <ctype.h>

void main(void)
{
char *string = "Cat 1 Car 2 Cow 3...";
char buffer[100] = {0,};
int cnt = 0;

while(*string)
{
if(isalnum(*string))
{
buffer[cnt++] = *string;
}

string++;
}

puts(buffer);
}

092.문자가 대문자인지 검사하기 isupper()

#include <ctype.h>

int isupper(int c);

예제-092.c

#include <stdio.h>
#include <ctype.h>

void main(void)
{
char *string = "This is Korea!";
char buffer[100] = {0,};
int cnt = 0;

while(*string)
{
if(isupper(*string))
{
buffer[cnt++] = *string;
}

string++;
}

puts(buffer);
}

093.문자가 소문자인지 검사하기 islower()

#include <ctype.h>

int islower(intc);

예제-093.c

#include <stdio.h>
#include <ctype.h>

void main(void)
{
char *string = "This is Korea!";
char buffer[100] = {0,};
int cnt = 0;

while(*string)
{
if(islower(*string))
{
buffer[cnt++] = *string;
}

string++;
}

puts(buffer);
}

094.문자가 공백, 탭문자또는 개행문자인지 검사하기isspace()

#include <ctype.h>

int isspace(int c);

예제-094.c

#include <stdio.h>
#include <ctype.h>

void main(void)
{
char *string = "This is Korea!";
char buffer[100] = {0,};
int cnt = 0;

while(*string)
{
if(isspace(*string))
{
cnt++;
}

string++;
}

printf("공백, 탭 그리고 개행문자의 수는 %d입니다.\n", cnt);
}

isXXX로 시작하는 함수

isacii() : ch가 0부터 127까지의 표준 ASCII 문자라면 TRUE.

iscntrl(): ch가 제어 문자라면 TRUE.

isgraph() :ch가공백을 제외하고 인쇄 가능한 문자라면TRUE.

isprint() :ch가공백을 포함하여 인쇄 가능한 문자라면TRUE.

ispunct() :ch가구두점이라면TRUE.

isxdigit() : ch가 0부터 9까지의 숫자,a부터f까지의 문자,A부터F까지의 문자를 사용하는 16진수라면TRUE.

isspace() 함수는 문자열 좌우의 공백 등 필요 없는 문자를 제거하려 할 때 유용하다.

isspace() 함수를 사용하지 않고 공백/탭/개행문자를 검사하려면다음과 같이 작성하면 된다.

if(*string == ' '|| *string == '\t' ||*string== '\r'||*string =='\n')

095. 문자열에서 앞·뒤 2바이트씩 교환하기 swab()

#include <stdlib.h>

void swab(char *src,char *dest,int count);

src는 원본 문자열이며,dest는 바뀌어진 문자가 저장될 버퍼의 포인터,count는 바뀌어질 총 문자의 수

예제-095.c

#include <stdio.h>
#include <stdlib.h>

void main(void)
{
char string1[] = "1a2b3c4d5e";
char string2[] = "..........";

puts(string1);
puts(string2);

swab(string1, string2, sizeof(string1)-1);

puts(string1);
puts(string2);
}

'C언어' 카테고리의 다른 글

Chapter 6. scanf()와 fgets()  (0) 2011.10.16
Chapter 2. 1차원 배열과 포인터  (0) 2011.10.16
Chapter 3. 2차원 배열과 포인터  (0) 2011.10.16
실행결과  (0) 2011.10.16
Chapter 1. 포인터의 기초  (0) 2011.10.16