반응형

【 C 언어 】 #60 문자열을 구분하기 [strtok()함수사용]

 

 strtok() 함수는 이전에 검색한 위치를 저장할 수 있기 때문에 공백을 인지해서 문장을 구분 짓는 코드를 작성해보자.



▶ 문제1  : 영어 문장(문자열)을 입력받고 공백으로 구분하여 화면에 출력하라. 


▶ 실행 결과 :

(이미지 클릭, 확대해서 보세요)



▶ 포인트 


- strtok() 함수 원형 :  char* strtok(char* strToken, const char* strDelimit)


- 함수 사용을 위해 strtok() 함수가 포함 되어 있는 <string.h > 헤더파일을 선언하라.


▶ 프로그램 (답안 예시) : 

(이미지 클릭, 확대해서 보세요)


▶ 프로그램 설명 : 

- strtok() 함수는 내부적으로 이전에 검색한 위치를 저장하고 있다. 따라서 string이 아닌 NULL을 strtok()함수에 넘겨 주면, 검색된 다음 위치부터 자동으로 검색하게 된다.

token = strtok(string,TOKEN);  TOKEN을 " "(공백) 으로 define(정의) 했으므로 공백이 있는지 찾는다. 만약 공백을 찾은 경우, 공백이 있는 자리에 NULL값을 넣은 후 문자열의 선두 번지를 반환 한다.  만약 공백이 없는 경우, 문자 배열 변수 string의 선두 번지를 반환한다.


while(token != NULL)  반환값이 NULL인지 비교한다. NULL이 아니면 token 값을 출력(pus)하고 NULL 이면 while문을 종료 한다.


token = strtok(NULL, TOKEN);  앞의 코딩 문 token = strtok(string,TOKEN)에서 공백을 찾은, 다음 번지부터 다시 공백을 찾는데, 공백이 있을 경우 NULL값을 넣은 후 다음 문자열의 선두 번지를 반환한다. 

- strtok() 함수는 이전에 검색한 위치를 저장하고 있기 때문에 string이 아닌 NULL 값을 strtok()함수에 넘겨주면, 검색된 다음 위치부터 자동으로 검색하게 된다. 


++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


▶ 소스코드 다운로드 :  


60 문자열을 구분하기 strtok() 함수 사용하기.cpp



반응형
반응형

【 C 언어 】 #59 문자열 중에서 특정문자만 검색하기 ( strchr 함수 사용하기)

 

 strchr() 함수를 사용하면 입력받은 문자열 중에 특정 문자 하나가 있는지 검색할 수 있다. 



▶ 문제1  : 영어 문장(문자열)을 입력받고 문자열 중에서 'u' 라는 문자가 있는지 검색하여 있으면 찾았다는 문장을 출력하고, 없으면 없다는 메세지를 출력하라. 'u' 문자의 위치값도 표시하라


▶ 실행 결과 :

(이미지 클릭, 확대해서 보세요)



▶ 포인트 


- strchr() 함수 원형 :  char* strchr(const char* string, int c);


- 함수 사용을 위해 strstr() 함수가 포함 되어 있는 <string.h > 헤더파일을 선언하라.


▶ 프로그램 (답안 예시) : 

(이미지 클릭, 확대해서 보세요)


▶ 프로그램 설명 : 

- strstr() 함수는 문자열 뿐 아니라 단일 문자도 검색이 가능하다

- char *ret   :  strchr()함수가 반환하는 문자형 포인터 값을 저장할 변수를 정의한다. 

- 문자열을 배열 변수 string[100]에 입력받는다. 

- #define FIND_CHR 'u'   :   u 를 대체하여 FIND_CHR로 선언한다

- ret = strchr(string, FIND_CHR   :  입력받은 문자열 중에 'u' 가 있는지 검색하여 찾으면 그 위치의 메로리(번지) 값을 반환(저장) 한다.  없으면 NULL포인터를 반환


- printf("%d 위치에서...., ret-string+1)     :  문자열 중에서 'u'값이 검색된 경우, 그 위치의 메모리 값(번지)에서 문자열 배열 변수 string의 메모리 값(번지)를 빼면 'u'문자의 위치 값을 얻을 수 있다. 단, ...0 번지의 경우 계산이 되지 않기에 정확한 순서값을 얻기 위해 +1을 더해 준다.


- 프로그램에서 처럼 변수 'ret' 와 'string'의 메모리 값(번지)을 출력 해보면 좀더 명확히 이해 될 것이다.   


++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


▶ 소스코드 다운로드 :  


59 문자열 검색하기 strchr() 함수 사용하기.exe



반응형

【 C 언어 】#46 매크로 (macro) 이해하기

Language/C & C++ 2018. 5. 15. 10:39 Posted by 엑소더스팩토리
반응형

【 C 언어 】 #46 매크로 (macro) 이해하기



 매크로란? 자주 사용하는 여러개의 명령어를 묶어 하나의 새로운 명령어로 만드는 방법을 말한다.  따라서, 매크로를 이용하여 함수를 사용하지 않고도 간단한 함수의 기능을 이용할 수 있다.  #define 문을 이용하며, 주로 번잡한 문장을 단순화하기 위해 사용한다.


▶ 문제  : 매크로를 정의하여 두 수의 최대값(MAX) 과 최소값(MIM) 값을 화면에 출력 하시오.


▶ 실행 결과 :

(이미지 클릭, 확대해서 보세요)




▶ 포인트 


- C언어에서 3항 연산자를 이용해서 macro 기능을 사용해본다.

- 3항연산자  A ? B : C    → A가 참이면 B,  거짓이면 C  




▶ 프로그램 (답안 예시) : 

(이미지 클릭, 확대해서 보세요)




▶ 프로그램 설명 


- a > b ? a : b →   a가 b보다 크면(참이면)   a 값,  아니면 b값
- a < b ? a : b →   a가 b보다 작으면(참이면) a 값,  아니면 b값

- Max(a,b)  라고 선언할 경우 a,b 는 본문에서 사용되는 변수의 인수(인자) 역할을 한다.  


+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


▶ 소스코드 다운로드 :  


46 macro 이해하기.cpp


반응형
반응형

【 C 언어 】 #45 <#include 문>으로 헤더파일을 선언해보자



 프로그램을 작성하다 보면 화면으로 출력해주는 'printf' 문과 같은 내장함수 들을 사용하게 된다. 이러한 함수들은 <stdio.h> 라는 기본 입출력에 해당하는 헤더 파일에 정의 되어 있고 이를 이용하기 위해서는 #include문으로 선언을 해주어야 한다.  만약 그렇지 않고 자신이 직접 모든 모듈을 다 작성하게 되면 시간이 많이 걸릴 것이며 프로그램의 효율성이 떨어지게 된다. 


▶ 문제  : 키보드로 문자 하나를 입력 받는 프로그램을 작성하되, 키보드로 부터 문자를 입력받을 수 있는 getch() 함수를 이용하라. getch()함수는 채conio.h 헤더 파일에 포함되어 있으며 #include문으로 선언해주면 프로그램내에서 사용이 가능하다. 


▶ 실행 결과 :


(이미지 클릭, 확대해서 보세요)




▶ 포인트 


- printf(), scanf(), getch() 함수 등을 사용하기 위해서는 함수내용이 포함된 헤더파일을 선언해야 프로그램내에서 사용이 가능하다.


- <stdio.h> : printf(), scanf()과 같은 입출력과 관련된 가장 기본이되는 함수의 집합인 헤더파일


- <conio.h> : 키보드와 같은 콘솔 입출력 장치와 관련된 함수들을 모아 놓은 헤더파일.

 [ 관련 함수 소개 ]

  → kbhit     : 키보드가 눌렸는지 확인

  → getch    : 콘솔에서 키보드 입력으로 한 개의 키 입력을 받음, (echo 없음)

  → getche   : 콘솔에서 키보드 입력으로 한 개의 키 입력을 받음, (echo 있음:타이핑한 키가 화면에 표시 됨)

  → putch     : 콘솔에 문자 하나를 출력  ( putchar 와 같음)

  → cputs    :  콘솔에 문자열을 출력

  → cprintf   :  포맷을 사용해서 콘손에 문자열을 출력

  → ungetch : 키보드 버퍼로 문자 한 개를 넣음

  → cgets     :  콘솔로 부터 문자열을 직접 입력 받음

  → gscanf   :  콘솔로 부터 포맷팅 된 입력을 받음


- #include <파일명>   & #include "파일명"  의 차이점  

  1. #include <파일명> : C의 표준 라이브러리 및 본래의 설치된 경로를 사용함을 의미

  2. #include "파일명"  : 사용자 정의 헤더파일을 먼저 검색후(컴파일 되고 있는 파일 위치) 표준라이브러리(본래 경로) 검색 함


- #include "..\..\include\test.h"    와 같이 헤더파일의 특정 경로 지정 가능


▶ 프로그램 (답안 예시) : 

(이미지 클릭, 확대해서 보세요)


+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++



▶ 소스코드 다운로드 :  

45 #include 문으로 헤더파일을 선언해보자.cpp




반응형

【 C 언어 】#44 전역변수-지역변수 이해하기

Language/C & C++ 2018. 5. 14. 11:40 Posted by 엑소더스팩토리
반응형

【 C 언어 】 #44 전역변수-지역변수 이해하기



 같은 변수명을 전역변수와 지역변수로 각각 선언하면서 초기값을 지정하게 되면, 변수가 사용되는 위치에 따라 값이 달라 질 수 있다. 지역변수와 전역변수가 이용 되는 범위에 대해 이해해보자.


▶ 문제  : int x를 전역변수와 지역변수로 각각 선언하고 초기값을 전역에 100, 메인함수 내에서 지역변수 초기값으로 50을 주고 출력하고, 서부루틴 함수 2개를 만들어 하나는 전달 인수값 200을 주어 출력하고, 하나는 전역변수 값을 출력하도록 하도록 한다. 


▶ 실행 결과 :


(이미지 클릭, 확대해서 보세요)




▶ 포인트 


- 통상적으로 전역변수명과 지역변수명을 같게 하여 작성하지 않으나, 필요한 경우도 있다.

- 변수 선언명을 각각, 지역변수 display_Localx(int x), 전역변수 display_Globalx(void) 로 선언한다.

- 지역변수는 메인 함수 내에서 전역변수 보다 우선순위가 높다.

- 함수 내에서 선언된 지역변수는 해당 함수 내에서만 사용된다. 따라서 다른 함수에서 사용하려면 다시 선언을 해주거나, 전역변수로 선언해야 한다.

- 동일한 변수 명이 전역과 지역함수에서 사용 될 경우, 초기값을 주어야 한다.   그렇지 않으면 쓰레기값(garbage)으로 초기화 될 수 있다.



▶ 프로그램 (답안 예시) : 

(이미지 클릭, 확대해서 보세요)


+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++



▶ 소스코드 다운로드 :  


44 전역변수 지역변수 이해하기.cpp



반응형

【 C 언어 】 #34 변수의 메모리 번지 이해하기

Language/C & C++ 2018. 4. 17. 10:44 Posted by 엑소더스팩토리
반응형

【 C 언어 】 #34 변수의 메모리 번지(주소) 이해하기



 변수가 정의 될 때는 변수 값을 저장할 메모리 공간(정수형 변수는 4바이트)을 확보하고 그 주소를 지정(기억)하게 된다.  프로그래밍이 처리 되는 과정에서 데이터가 저장된 메모리의 번지를 이용해서 값을 불러오거나 처리할 수 있게 된다. 


▶ 문제  : 변수 i =0 와 j =1 를 선언하고 초기값 0과 1을 준다. 각 변수가 지정된 메모리 번지를 출력하라.


▶ 포인트 

  printf() 함수를 이용해서 메모리 번지를 출력 할 수 있으며, (정수형)값을 나타내는 %d 대신 %p 를 사용하며, 변수의 메모리 번지를 넘겨주기 위한 '번지 지정 연산자(&)'를 사용하면 번지를 출력할 수 있다. 



▶ 프로그램 : 




▶ 실행 결과 :



▶ 보충설명 :


j는 0062FE48~0062FE4B ,  4바이트의 메모리 공간으로 지정 되어 있으며 시작번지가 0062FE48 이다.  여기에 데이터 1의 값이 저장되어 있다.


i는 0062FE4C~0062FE4F ,  4바이트의 메모리 공간으로 지정 되어 있으며 시작번지가 0062FE4C 이다.  여기에 데이터 0의 값이 저장되어 있다.


아래 변수와 메모리와의 관계 도표를 보면 쉽게 이해가 갈 것이다.



+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++



▶ 소스코드 다운로드 :  



반응형
반응형

【 C 언어 】 #33 배열 이해하기 2 (국영수 성적 예제)



 앞 글에서 다룬 배열을 사용하면 여러 종류와 많은 데이터를 일괄적을 관리하기에 편하다.  


▶ 문제  : 국영수 3과목 각 10개의 점수 데이터를 배열로 저장하고 각 과목별 점수와 각 과목의 평균값을 출력하라. 

 

▶ 포인트 

  먼저 국영수 등 기본 값들을 출력하고, 각 값들의 평균값 계산 및 저장을 위한 변수를 선언한다. everageK(국어평균), everageE(영어평균)everageM(수학평균), 평균값 변수 선언 때 float 형과 같은 실수형을 선언해야 소숫점의 평균값을 다룰 수 있으며, 깔끔한 출력을 위해 소숫점 출력 자릿 수를 지정하면 좋다. (%.1f  : 소수 첫 째 자리까지만 표시) 지정하지 않을 경우 "87.500000" 과 같이 표시 됨


▶ 프로그램 : 




▶ 실행 결과 :



+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++



▶ 소스코드 다운로드 :  



반응형

【 C 언어 】 #32 배열 이해하기

Language/C & C++ 2018. 4. 16. 10:08 Posted by 엑소더스팩토리
반응형

【 C 언어 】 #32 배열 이해하기



 데이터 값을 배열을 사용하면 쉽고 편하게 저장하고 꺼내 쓸 수 있다. 


▶ 문제  : 영어 성적 10개를 배열을 사용하여 기억시키고 차례대로 출력하도록 하시오.

 

▶ 포인트 

 배열은 다음과 같은 형식을 사용 한다. 

 int 배열명[10] = { x1, x2, x3, ... };


 배열값 출력은 for 문을 사용하면 차례대로 쉽게 출력 된다. 


▶ 프로그램 : 




▶ 실행 결과 :





+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++



▶ 소스코드 다운로드 :  



반응형

【 C 언어 】 #31 ASCII 코드 - 문자열 이해하기

Language/C & C++ 2018. 4. 13. 14:59 Posted by 엑소더스팩토리
반응형

【 C 언어 】 #31 ASCII 코드 - 문자열 이해하기



 아스키(ASCII) 코드 문자를 출력하는 프로그램을 작성해본다. 

이 원리를 파악하면 특정 순서에 있는 아스키 값을 수식 계산으로 손쉽게 출력할 수 있다.


▶ 문제  : 아스키 코드로 명명된 문자(열)들을 0~255까지 순서대로 출력하시오. 

 

▶ 포인트 

 정수 출력은 %d, 문자는 %c 를 사용하여 출력한다.  

 또한, C 프로그래밍에서 문자를 표현할 때는 ' ' 로 ,  문자열을 표현할 때는 " " 를 사용한다.   정수 출력 자리수를 3자리로 지정(유지)하고 싶을 때는 '%3d' 로 하면 된다.  빈자리는 공백으로 채워짐


▶ 프로그램 : 





▶ 실행 결과 :







+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++




▶ 소스코드 다운로드 :  


31 ASCII 코드 문자열 이해하기-프로그램.cpp




반응형

【 C 언어 】 #30-무조건-분기문 (goto 문)-이해하기

Language/C & C++ 2018. 4. 13. 12:12 Posted by 엑소더스팩토리
반응형

【 C 언어 】 #30-무조건-분기문 (goto 문)-이해하기


 무조건 분기(이동, 빠져나옴) 되는 goto 문은 잘 사용하지 않지만 다중 if문에 둘러 쌓였을 때 한번에 빠져 나올 수 있는 기능이 있어 간혹 유용하게 사용되기도 한다. 


▶ 문제  : 이중 if문을 사용하여 구구단 프로그램을 작성하고 구구단의 마지막 식(9 X 9 = 81)에 다다르면 goto 문을 사용하여 이중 if문을 빠져나와서 종료하도록 작성하라.

 

▶ 포인트 

 goto 문 사용 형식 →  "goto gugudan;"   "gugudan:;"    

이 때 'gugudan'은 따로 선언할 필요는 없으며 이동 할 위치에 기입하면 된다.


▶ 프로그램 : 





▶ 실행 결과 :




+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++




▶ 소스코드 다운로드 :  


30 무조건 분기문 이해하기 (goto 문).cpp


반응형