ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 문자열 - 바로 실행해보면서 배우는 C언어
    CS/C언어 2019. 12. 22. 16:57

    정수 데이터타입 char

    크기 : 1바이트(8비트), -128 ~ +127

    아스키 코드 방식으로 256개의 글자 표현 가능. (영소문자, 특수문자, 숫자 등)

    * 아스키 코드 : 문자를 숫자에 하나씩 매칭시켜 표현하는 방식.

    * 유니코드 : 문자를 2바이트로 처리해 256256 = 약 6만5천개 문자 표현 가능. (한글 등)

     

    char ch = 'a';

    형식지정자 %c 사용하면 문자('a')로 출력, %d 사용하면 숫자(97, 'a'의 아스키코드)로 출력됨.

     

    char ch = 'ab';

    char 데이터타입은 1바이트로, 한 글자만 담을 수 있다. 따라서 마지막으로 입력한 b만 담긴다.

    char 타입 변수에 여러 글자를 담고 싶다면 char 타입 배열을 만들면 된다.

     

    char ch[5] = "abcd";

    한 글자를 출력할 때는 %c 형식지정자, 여러 글자가 담긴 문자열을 출력할 때는 %s 형식지정자 사용.

    배열을 출력할 때는 어디까지 출력할 것인지를 컴퓨터에게 알려주기 위해

    배열에 '종료 문자'(0, null, \0 등의 값)를 포함시켜야 한다.

    ch[5] 배열의 크기가 5인데 4개의 문자만 담았기 때문에 마지막 한 자리는 자동으로 0이나 null 값이 되어 종료문자의 역할을 하게 된다.

    ⇒ 문자 배열(문자열)의 마지막 자리에는 0, null 등 종료 문자가 들어갈 자리가 있어야 한다.

     

    문자열은 선언과 동시에 값을 할당해야한다.

    선언 이후 값을 할당하려면

    ch[0]= 'a';

    ch[1] = 'b';

    와 같이 하나씩 값을 대입하지 않는 이상 오류가 발생한다.

     

    단, 문자를 입력받아 문자열(배열)에 저장하는 건 선언 이후에 해도 상관없다.

     

    변수가 문자열이 아닌 문자인 경우, 입력할 때 1개를 초과해서 입력하면 처음 글자만 변수에 담긴다. abc → a

    문자열을 scanf()로 입력받을 때는 "&"를 사용하지 않아도 된다. 배열의 경우 이름 자체에 주소가 담겨있어 따로 주소값을 알려줄 필요가 없기 때문이다.

     

    문자열 갯수 세기 정답

    #include <stdio.h>
    int main() {
    	char ch[30];
    	int length = sizeof(ch) / sizeof(char) -1;
    	
    	scanf("%s", ch);
    	
    	int sum = 0;
    	for(int i = 0; i<length; i++) {
    		if(ch[i] == 0) {
    			break;
    		}
    		sum++;
    	}
    	printf("%d", sum);
    	return 0;
    }

     


    ※ 출처 : 바로 실행해보면서 배우는 C언어, 7강 문자열

    댓글

Designed by Tistory.