01. 문자와 문자열
문자와 문자열 개념
문자 : 한 글자를 작은 따옴표로 감싼 것 EX) 'A'
작은따옴표에 의해 표기된 문자를 문자 상수
문자열 : 문자의 모임인 일련의 문자 / 일련의 문자 앞 뒤로 큰 따옴표로 둘러싸서 "java"로 표기 EX) "java"
** 문자의 나열인 문자열은 'ABC'처럼 작은따옴표로 둘러싸도 문자가 될 수 없으며 오류가 발생
문자와 문자열의 선언
char형 변수에 문자를 저장
C언어는 문자열 저장을 위한 자료형을 따로 제공하지 X
문자열 = 문자들을 원소로 하는 배열의 형태
**문자열은 문자열의 마지막을 의미하는 NULL 문자(코드 번호 0번 문자) '\0'가 마지막에 저장되어야 한다.
때문에 문자열이 저장되는 배열크기는 반드시 저장될 문자 수 보다 1이 커야 한다.
// 문자 선언
char ch = 'A';
// 문자열 선언 1
char java[] = {'J', 'A', 'V', 'A', '\0'};
// 문자열 선언 2
char py[] = "Python";
// 문자열 선언 3
char csharp[5] = "C#";
문자의 형식제어문자 : %c
문자열의 형식제어문자 : %s
문자열 상수를 문자 포인터에 저장하는 방식
+ 문자 포인터에 의한 선언으로는 문자열을 구성하는 문자 하나하나의 수정은 할 수 없다.
+ 문자 포인터를 이용한 문자열 수정은 불가!
#include <stdio.h>
int main(void)
{
char* java = "java"; // 문자형 포인터로 문자열 저장
printf("%s ", java);
int i = 0;
while (java[i]) // 문자열의 마지막 원소인 '\0'를 만날때 까지 반복
{
printf("%c", java[i++]); // 문자열 출력
}
printf(" ");
i = 0;
while (*(java + i) != '\0')
{
printf("%c", *(java + i++));
}
printf("\n");
java[1] = 'A'; // 포인터를 이용한 문자열 수정 시도!
printf("%c", java[1]);
return 0;
}
/*
java java java
종료코드 (1) 반환!
*/
다양한 문자 입출력
getchar() : 문자 입력에 사용, 라인 버퍼링(line buffering) 방식을 사용
putchar() : 문자 출력에 사용
_getche() : 문자 입력에 사용, 버퍼 사용하지 않음, 문자 하나를 바로 바로 입력할 수 있는 함수, <conio.h>에 포함
_getch() : 문자 입력에 사용, 버퍼 사용하지 않음, 입력한 문자가 화면에 보이지 않는 특성, <conio.h>에 포함
#include <stdio.h>
#include <conio.h>
int main(void)
{
char ch;
printf("문자를 계속 입력하고 Enter를 누르면 >>\n");
while ((ch = getchar()) != 'q') // getchar()
{
putchar(ch);
}
printf("문자를 계속 입력하고 Enter를 누르면 >>\n");
while ((ch = _getche()) != 'q') // conio.h
{
_putch(ch); // conio.h
}
printf("문자를 계속 입력하고 Enter를 누르면 >>\n");
while ((ch = _getch()) != 'q') // conio.h
{
_putch(ch);
}
return 0;
}
#include <stdio.h>
int main(void)
{
char ch;
while ((ch = getchar()) != 'x') // x가 입력되면 입력 종료
{
putchar(ch);
}
printf("\n");
return 0;
}
// 입력 문자 : basic aplx visual
/*
basic aplx visual
basic apl
*/
scanf() : 문자열 입력 함수
get() : 한행 문자열 입력 함수 , <stdio.h>
put() : 한행 문자열 출력 함수 , <stdio.h>
02. 문자열 관련 함수
<string.h>
strcmp() : 문자열 비교 함수
: 같은 위치의 문자를 앞에서부터 다를 때까지 비교하여 같으면 0 반환, 앞이 크면 양수, 뒤가 크면 음수
strncmp() : 문자열 비교 함수 (세번째 인자인 n까지 비교)
=> 문자열 비교 기준은 아스키 코드
strlen() : 문자열 길이 반환
memcpy() : 문자 배열을 복사
strcpy() : 문자열 복사 함수
strncpy() : 문자열 복사 함수 (세번째 인자인 n까지 복사)
strcat() : 앞 문자열에 뒤 문자열의 null 문자까지 연결하여, 앞의 무낮열 주소를 반환하는 함수
strtok() : 문자열에서 구분자(delimiter)인 문자를 여러개 지정하여 토큰을 추출하는 함수
#include <stdio.h>
#include <string.h>
int main(void)
{
char str[] = "C and C++\t languages are best!";
char *delimiter = " !\t";
printf("문자열 \"%s\"을 >>\n", str);
printf("구분자[%s]를 이용하여 토큰을 추출 >> \n", delimiter);
char* ptoken = strtok(str, delimiter); // 첫 토큰 추출
while (ptoken)
{
printf("%s\n", ptoken);
ptoken = strtok(NULL, delimiter); // 다음 토큰을 반환
}
return 0;
}
/*
문자열 "C and C++ languages are best!"을 >>
구분자[ ! ]를 이용하여 토큰을 추출 >>
C
and
C++
languages
are
best
*/
#include <stdio.h>
#include <string.h>
int main(void)
{
char str[] = "Python, C#, Kotlin!";
char* delimiter = " !,";
char* ptoken = strtok(str, delimiter);
ptoken = strtok(NULL, delimiter);
printf("%s\n", ptoken);
char* s = "strpbrk()strcat()strcpy()";
printf("%s\n", strpbrk(s, "cpy"));
return 0;
}
/*
C#
pbrk()strcat()strcpy()
*/
03. 여러 문자열 처리
1. 문자 포인터 배열을 이용하는 방법
char *pa[] = {"JAVA", "C#", "C++"};
printf("%s ", pa[0]);
printf("%s ", pa[1]);
printf("%s ", pa[2]);
2. 문자의 2차원 배열을 이용하는 방법
char ca[][5] = {"JAVA", "C#", "C++"};
printf("%s ", ca[0]);
printf("%s ", ca[1]);
printf("%s ", ca[2]);
* 2차원 배열의 열의 크기는 필수적으로 지정해야 함!
명령행 인자
'C Programming' 카테고리의 다른 글
[C언어로 배우는 프로그래밍 기초 Perfect 3판] Chapter 12. 문자와 문자열 - 프로그래밍 연습 (0) | 2022.07.09 |
---|---|
[C언어로 배우는 프로그래밍 기초 Perfect 3판] Chapter 11. 포인터 기초 - 프로그래밍 연습 (0) | 2022.07.07 |
[C언어로 배우는 프로그래밍 기초 Perfect 3판] Chapter 10. 변수 유효범위 프로그래밍 연습 (0) | 2022.07.07 |
[C언어로 배우는 프로그래밍 기초 Perfect 3판] Chapter 10. 변수 유효범위 (0) | 2022.07.06 |
[C언어로 배우는 프로그래밍 기초 Perfect 3판] Chapter 14. 함수와 포인터 활용 (0) | 2022.07.04 |