배열과 문자열

2022. 2. 14. 14:21IoT Embeded 강의

#문자열

char 문자형 변수를 선언한 뒤 변수에 문자 1개를 대입하는 것은 다음과 같습니다. 

 

char x = 'a';

 

x에 작은 따옴표를 사용하여 a라는 문자를 대입했습니다. 이를 출력 시 형식지정자 %c를 사용하여 출력할 수 있습니다.

 

printf("%c" , x); // 출력하게 되면 a 가 출력됩니다.

 

문자 여러 개를 배열에 담아 출력하면 문자열을 출력할 수 있습니다. C언어에서는 1개 이상의 문자들을 다룰 때는 배열을 이용합니다. 문자형 배열을 선언한 뒤 그 안에 여러 개의 문자를 넣어 하나의 단어나 문장을 만드는 것입니다. 정리하면 'a' 는 문자이고 'apple'은 문자열이며 배열에 담깁니다. 문자형 배열 선언와 대입 방법은 다음과 같습니다.

 

char array[5] = "good";

 

자료형을 char 형으로 배열을 선언한 뒤 크기를 5로 지정하였고, 그 안에 큰 따옴표를 사용하여 good이라는 4개의 문자를 넣었습니다. 여기서 기억해야할 점은 우리 눈에는  good 4글자만 보이지만 컴퓨터에서는 문자열의 끝을 의미하는 NULL문자 (\0)이 항상 존재한다는 것입니다. 때문에 글자가 4글자인 문자열이라면 그것을 담는 그릇인 배열의 크기는 크기가 5여야 합니다. 이를 출력하는 코드는 아래와 같습니다.

 

printf("%s" , array, sizeof(array)); // 출력하게 되면 good 가 출력됩니다.

 

문자열을 출력할때는 형식지정자 %s를 사용합니다. 또한 출력함수에서 변수 자리 다음에는 문자열의 크기를 입력해줘야 합니다. 이를 sizeof()함수를 이용하여 array라는 배열의 크기를 출력하도록 했습니다. 현재 array는 char형으로 크기가 5이므로 1byte x 5 인 5byte의 크기를 갖고 있으므로 sizeof() 함수의 값은 5가 됩니다.

 

1. 문자열 선언 방법

 

1) 문자형 배열 선언과 동시에 문자열을 지정하는 방법
char array[5] = "good";  
char array[5] = {'g', 'o', 'o', 'd', '\0'};

2) 문자열 선언과 문자열 지정을 별도로 지정하는 방법
char array[5];
array[0] = 'g' ;
array[1] = 'o' ;
array[2] = 'o' ;
array[3] = 'd' ;
array[4] = '\0' ;

오류발생 예
char array[5];
array = "good";

 

2. 문자형 배열 출력

문자열을 출력할때는 형식지정자 %s를 사용합니다. 이후에 배열 이름을 넣어서 형식지정자에 대응시킵니다. 이 때 유의하실 점은 array라는 배열보다 크기가 큰 문자열이 입력되어 있다면 출력 시 쓰레기 값이 출력됩니다.

 

printf("%s", array);

3. 문자형 배열 입력

문자열 입력 시 형식지정자 %s를 사용하며 배열 이름을 대응시킵니다. 여기에 배열 이름 오른쪽에 문자열을 담는 배열의 크기를 반드시 지정해줘야 합니다. sizeof()함수를 이용해 배열의 크기를 받아 입력함수에 넣어줍니다. 여기서 유의하실점은 변수를 입력할때는 변수이름에 &기호를 붙였지만 배열에는 붙이지 않습니다. 왜냐하면 배열 이름 자체는 그 배열의 주소를 나타내기 때문입니다. 이는 나중에 포인터를 다루면서 상세히 설명하겠습니다. 

 

scanf_s("%s", array, sizeof(array));

 

입출력함수와 반복문을 이용한 문자열 예제는 아래와 같습니다.

 

1. 문자열 출력

void main()
{
//문자형 배열선언과 초기화 (세 가지 방법)
char a[5] = "good";
char b[5] = { 'g','o','o','d','\0' };
char c[5];

c[0] = 'g' ;
c[1] = 'o' ;
c[2] = 'o' ;
c[3] = 'd' ;
c[4] = '\0' ;

//오류 발생의 예시(d) : 문자열 크기 초과
char d[5] = "good~";
printf("a = %s\n", a);
printf("b = %s\n", b);
printf("c = %s\n", c);
printf("d = %s\n", d);

 

//이중 for문을 이용해

int row, col;

char str[11] = "I Love You";

for (row = 1; row < 10; row++)
{
for (col = 0; col <row+1; col++)
{
printf("%c", str[col]);
}
printf("\n");
}


}

 

2.문자열 입력

 

#include <stdio.h>
#define SIZE 7
void main()
{
char str[SIZE];
//문자열 입력 , 출력
printf("문자열을 입력 = "); 
scanf_s("%s", str, sizeof(str));  //입력함수로 str에 문자열을 입력

printf("입력된 문자 = %s", str); //입력된 문자를 그대로 출력
printf("\n");

//문자의 개수 변수 선언
int cnt = 0;
while (str[cnt] != '\0') //문자열이 담긴 배열의 원소 값이 NULL이 아닐동안만 cnt에 값을 1씩 증가 (문자열 안의 문자 개수 세기)
{
cnt++;
}
printf("입력된 문자의 개수 = %d\n", cnt);

//입력받은 문자열을 거꾸로 출력하기, 반복문으로 str배열에서 원소 1개씩을 출력하여 문자열 구현
printf("거꾸로 출력 = ");
for (int i = cnt; i >=0 ; i--)
{
printf("%c", str[i]);
}
printf("\n");

//입력받은 문자열을 거꾸로 배열로 출력하기, str2 배열을 선언하여 str원소를 거꾸로 넣은 뒤 문자열 출력
char str2[SIZE];
str2[cnt] = str[cnt];
for (int i = 0; i < cnt; i++)
{
str2[i] = str[cnt-1-i];
}
printf("거꾸로 출력(배열) = %s\n", str2);
}

'IoT Embeded 강의' 카테고리의 다른 글

포인터 / 포인터 선언 / 초기화 / 연산 / 문자열  (0) 2022.02.28
자료형과 해석  (0) 2022.02.24
1차원 배열  (0) 2022.02.14
증감 연산자  (0) 2022.02.10
프로젝트 생성과 기본 소스 코드 작성  (0) 2022.02.10