연재 완료/C Lang 예제코드 모음

C언어 표준 라이브러리 주요예제 2 (기억장치 관리 함수 ~ 문자 처리 함수)

라이피 (Lypi) 2018. 6. 9. 02:32
반응형


기억 장치 관리 함수

1. 10 바이트의 기억 공간을 확보하여 "Hello" 문자열에 할당하고 출력하는 프로그램을 작성하라.

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

int main()
{
	char* p;
		
	if ((p = (char*)malloc(10)) == NULL) {
		printf("메모리 할당 실패 \n");
		return 0;
	}

	strcpy_s(p, 10, "Hello");

	printf("%s",p);

	free(p);
}


2. 5개의 변수에 대해 128 바이트 기억 공간을 확보하고, 만약 기억 공간을 할당받지 못할 경우 "메모리 할당 실패" 메시지와 함께 프로그램에서 빠져나오고, 할당받을 경우에는 한 문자열을 키보드를 통해 입력받을 수 있는 프로그램을 작성하라.

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


//여러개의 공간을 동적할당 받는 예제.
int main()
{
	char* str[5];

	for (int i = 0; i < 5; i++) {
		str[i] = (char*)malloc(128);
	}


	if (str == NULL) {
		printf("메모리 할당 실패 \n");
		return 0;
	}
	else {
		for (int i = 0; i < 5; i++) {
			printf("문자열을 입력하세요 : ");
			scanf_s("%s", str[i], 128);
		}
	}

	for (int i = 0; i < 5; i++) {
		printf("%s \n", str[i]);
	}

	for (int i = 0; i < 5; i++) {
		free(str[i]);
	}
}


문자 처리 함수


3. 키보드로부터 입력되는 문자가 숫자인지를 판별하는 프로그램을 작성하라.

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

//키보드로부터 입력되는 문자가 숫자인지를 판별하고 숫자이면 문자열에 넣는 예제
int main()
{
	char numberstr[51];
	char buffer = 0;
	int i = 0;
		
	while( buffer != 13 && i < 50) {
		
		// buffer = getc(stdin); //엔터를 필요로 한다.
		buffer = _getch(); //엔터를 필요로 하지 않는다.
		if (isdigit(buffer)) {
			_putch(buffer);
			_putch('\n');
			numberstr[i] = buffer;
			i++;
		}
		else if (buffer == 13) {
			break;
		} 
		else {
			printf("%c", buffer);
			printf("입력하시는 키가 숫자가 아닙니다. \n");
		}
	}
	numberstr[i] = '\0';

	printf("%s", numberstr);

}

//책에 있는 예제는 매우 간단한데 직접 짜다보니 뭔가 복잡하게 만들어졌다...


4. 키보드로부터 입력되는 문자가 영문자인가를 판별하는 프로그램을 작성하라.

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

//입력된 키가 영문자인지 판별하는 프로그램.
int main()
{
	char buffer = 0;

	while (buffer != 27) { // ESC = 27
		printf("입력된 키가 영문자인지 확인합니다. 종료하려면 ESC를 누르세요. \n");
		buffer = _getch();
		if (isalpha(buffer)) {
			printf("%c는 영문자가 맞습니다. \n", buffer);
		}
		else if(buffer == 27) {
			printf("종료합니다.\n");
			break;
		}
		else {
			printf("%c는 영문자가 아닙니다. \n", buffer);
		}
		printf("\n");
	}
}


5. 키보드로 입력되는 문자가 소문지인지를 판별하는 프로그램을 작성하라.

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

//입력된 키가 소문자인지 판별하는 프로그램.
int main()
{
	char buffer = 0;

	while (buffer != 27) { // ESC = 27
		printf("입력된 키가 소문자인지 확인합니다. 종료하려면 ESC를 누르세요. \n");
		buffer = _getch();
		if (islower(buffer)) { //소문자인지 확인하는 함수
			printf("%c는 소문자입니다. \n", buffer);
		}
		else if (buffer == 27) {
			printf("종료합니다.\n");
			break;
		}
		else {
			printf("%c는 소문자가 아닙니다. \n", buffer);
		}
		printf("\n");
	}
}

//위의 예제랑 전혀 다른게 없다.


6. 키보드로 입력되는 소문자를 대문자로, 대문자를 소문자로 변환하는 프로그램을 작성하라.

//소문자를 대문자로, 대문자를 소문자로 변환하는 프로그램.

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

int main()
{
	char str[51];
	char buffer = 0;
	int i = 0;

	printf("대문자와 소문자를 변환해서 문자열을 만듭니다. \n");
	while (buffer != 13 && i < 50) {

		buffer = _getche(); //엔터를 필요로 하지 않는다. 에코 기능이 있다.
		if (buffer == 13) {
			break;
		}
		else {
			if(islower(buffer)) { 
				buffer = toupper(buffer);
				//소문자이면 대문자로
			}
			else if (isupper(buffer)) {
				buffer = tolower(buffer);
				//대문자이면 소문자로
			}
		}
		str[i] = buffer;
		i++;
	}
	str[i] = '\0';

	printf("%s", str);
}


반응형