C언어 - 문자열 출력과 입력

Jocy·2022년 4월 30일
0
post-thumbnail

문자열의 출력

char은 1바이트 크기의 자료형 입니다. 숫자(정수형)인데 어떻게 문자를 사용할 수 있을까요?
숫자를 글자에 대응시키는 방식으로 문자를 사용하고 있습니다.
알파벳 'a'는 97이라는 숫자와 대응됩니다. 이를 아스키 코드라고 합니다.

한글자를 넣을 경우

#include <stdio.h>

int main()
{
  char ch = 'a';
    
  printf("%d\n", ch); // a 와 매칭되는 97 출력
  printf("%c\n", ch); // a 출력
  
  return 0;
}

한글자가 아닌 여러글자를 넣을 경우

#include <stdio.h>

int main()
{
  char ch = 'ab';
    
  printf("%d\n", ch); // b와 매칭되는 98 출력 
  printf("%c\n", ch); // b 출력
  
  return 0;
}

char 자료형은 1바이트로 한 글자만 담을 수 있어서 ab중에서 마지막 글자 b만 ch변수에 담깁니다. 출력하면 숫자 98과 b가 출력됩니다.

변수에 여러글자 담기

#include <stdio.h>

int main()
{
  char ch[5] = "abcd";
  
  printf("ch 는 %s", ch);
  
  return 0;
}

한글자를 출력할때는 %c를 사용했지만 여러 글자가 담긴 문자열을 출력할때는 %s를 사용합니다.
배열의 크기가 4글자인데 5만큼 차지하고 있습니다. 실제로 컴퓨터가 인식할때에는 얼마만큼 길이를 출력하는지 알려줘야하는데 그것을 일일이 해주기에는 번거롭기 때문에 컴퓨터는 남는 자리에 0,NULL,\0를 넣어줍니다. 이 종료 문자를 통해서 어디까지 출력할 것인지를 컴퓨터에게 알려주게되어 정상출력 됩니다.

#include <stdio.h>

int main()
{
  char ch[7] = { 'a', 'b', 'c', 'd', 0, 'e', 'f' };
  
  printf("ch 는 %s", ch); // abcd
  
  return 0;
}

위 코드는 abcd가 출력이 됩니다. 문자열에 값을 대입하려면 선언할 때 바로 값을 넣어줘야합니다.
선언 이후에 값을 대입하면 오류가 나고 선언한 이후에 값을 넣으려면 인덱스별로 하나 하나 저장해야 합니다.

문자열의 입력

문자나 문자열을 입력받는 것은 문자열 선언 이후에 해도 상관이 없습니다.

한 글자만 입력하는 경우

#include <stdio.h>

int main()
{
  char ch;
  
  printf("한 글자만 입력해주세요 : ");
  scanf("%c", &ch); // 입력 값 : abc 
  printf("%c", ch); // 출력 : a
  
  return 0;
}

한 글자만 입력하는 경우 1개를 초과해서 입력하게 되면 처음 글자만 변수에 담기게 됩니다.
abc 를 저장하려고 했다면 a만 저장됩니다.

문자열 배열의 scanf에 관하여

#include <stdio.h>

int main()
{
  char ch[201];
  
  printf("200 자 이내로 입력해주세요 : ");
  scanf("%s", ch); // & 표시 없이 scanf 입력받기
  printf("%s", ch);
  
  return 0;
}

보통 scanf를 사용해서 값을 입력 받을 때 &를 꼭 붙여주었습니다.
하지만 문자열 배열의 경우에는 배열의 이름은 주소를 담고 있기 때문에 &를 안붙여도 됩니다.

문자열의 길이 구하기

#include <stdio.h>

int main()
{
	char ch[30];
	scanf("%s", &ch); // goorm
	
	int i;
	for(i = 0; ch[i] != NULL; i++){
		// i가 ch의 인덱스를 돌다가 NULL 값이 되면 멈추고 그 숫자를 표시해주는것
	}

	printf("%d", i); // 5

	return 0;
}

반복문으로 i가 인덱스를 돌다가 조건문(ch[i] != NULL)을 만족하는 값을 만나면 for문이 중지되어서 그 i값이 얼마인지 확인이 가능합니다. 다른 방법으로는 for문이 돌때마다 값을 카운트해주는 변수를 지정해서 확인해도 됩니다.

문자열 길이 구하기2

#include <stdio.h>
#include <string.h> // 전처리기 <string.h> 추가

int main()
{
	char input[5] = "Love";
    printf("문자열 길이 : &d", strlen(input)); // 문자열 길이 : 4

	return 0;
}

전처리기 <string.h> 추가하여 strlen() 함수를 이용해서 구할 수도 있습니다.

문자열 비교

#include <stdio.h>
#include <string.h> // 전처리기 <string.h> 추가

int main()
{
	char inputOne[5] = "A";
	char inputTwo[5] = "B";
    printf("문자열 비교 : &d", strcmp(inputOne, inputTwo)); // 문자열 비교 : -1
    
	char inputOne[5] = "B";
	char inputTwo[5] = "A";
    printf("문자열 비교 : &d", strcmp(inputOne, inputTwo)); // 문자열 비교 : 1
    
	char inputOne[5] = "A";
	char inputTwo[5] = "A";
    printf("문자열 비교 : &d", strcmp(inputOne, inputTwo)); // 문자열 비교 : 0

	return 0;
}

문자열 비교하는 함수로는 strcmp가 있습니다
인자 값중에 왼쪽의 값앞에 있는 값이라면 -1
인자 값중에 왼쪽의 값뒤에 있는 값이라면 1
인자 값이 둘다 동일하다면0 이 출력됩니다.

profile
Software Engineer

0개의 댓글