happy coding

[lecture] C언어 복습.문자와 문자열 본문

lecture/data structure

[lecture] C언어 복습.문자와 문자열

yeoonii 2022. 12. 27. 16:28

컴퓨터에서는 각각의 문자에 숫자코드를 붙여 표시하는데, 1. 아스키 코드 2. 유니 코드 가 대표적으로 존재한다. 여기서 아스키 코드는 영문자를 표시하기 위해 사용하는 표준적인 8비트 문자 코드 이며, 유니 코드는 전세계의 모든 문자를 표현할 수 있도록 설계한 표준적인 16비트 문자 코드이다. 문자 변수와 문자 상수('A')는 %c나 %d로 출력하는 경우 같은 값을 나타낸다. 문자 상수인 경우 컴퓨터가 알아서 아스키 코드로 저장한다. 문자 상수를 변수에 저장하면 문자 변수이다.

K 210 ~~ 103
M 220 ~~ 106
G 230 ~~ 109
T 240 ~~ 1012
byte 8 bit >> (unsigned)char (-27 ~ 27 - 1)
half word 16 bit >> (unsigned)short(int) (-215 ~ 215 - 1)
word 32 bit >> (unsigned)int
double word 64 bit

문자열(string)이란 문자들이 여러 개 모인 것이다. 문자는 char, 문자열은 string. 문자열을 char형 변수에 저장하면 문자열 변수가 된다. 

char vs. string : string은 문자열을 출력하였을 때 입력한 그대로 출력하지만, char은 자칫하면 정수로 출력될 수 있다. char이 1개의 문자를 담는 반면 string은 제한이 없다.
'/0'와 '0'의 차이점 : '0'은 진짜 0에 대한 아스키 코드값이고, '/0'은 EOF로 문자열의 끝을 표시해준다.(NULL char)
'/0' = 0, '0' = 48

문자 배열을 초기화하는 방법에는 1. 문자 배열 원소들을 중괄호 안에 넣어주는 방법, 2. 문자열 상수를 사용하여 초기화하는 방법, 3. 만약 배열의 크기를 지정하지 않으면 컴파일러가 자동으로 배열의 크기를 초기화값에 맞추어 설정하는 방법 이 있다.

문자 입출력 라이브러리

int getchar(void) 하나의 문자를 읽어 반환
void putchar(int c) 변수 c에 저장된 문자를 출력
int getch(void) 하나의 문자를 읽어 반환(버퍼 사용 하지 않음)
void putch(int c) 변수 c에 저장된 문자를 출력(버퍼 사용 하지 않음)
scanf("%c", &c) 하나의 문자를 읽어 변수 c에 저장
printf("%c", c) 변수c에 저장된 문자를 출력
scanf 에서 &을 사용하는 이유 : caller callee의 value
입력 장치로부터 값을 입력받아야 함 > 그 값을 레지스터에 임시로 저장 > 변수의 주소로 찾아가 그 주소가 가리키는 메로리에 레지스터에 있는 값을 저장한 후 레지스터에 있던 값을 지우는 과정을 거친다. 다시 말해, 값을 입력하려면 변수의 주소가 필요하기 때문에 &를 써야 한다. 하지만 만약 문자열(%s)을 집어넣을 경우엔 문자열 자체(변수가 포인터거나 배열 일때)가 주소이므로 &를 안써도 된다.
getchar와 달리 scanf는 argument를 여러 개 사용할 수 있는데 
printf 에서 &을 사용하지 않는 이유 : 출력하는 입장에서는 포인터로 넘겨줄 필요가 없다. 
strlen(s) 문자열 s의 길이를 구한다.
strcpy(s1, s2) s2를 s1에 복사한다.
strcat(s1,s2) s2를 s1의 끝에 붙여 넣는다.
strcmp(s1, s2) s1 과 s2를 비교한다. > 맞다면 0, s1이 크면 양수, s2가 크면 음수
strncpy(s1, s2, n) s2의 최대 n개의 문자를 s1에 복사한다.
strncat(s1, s2, n) s2의 최대 n개의 문자를 s1의 끝에 붙여 넣는다.
strncmp(s1, s2, n) 최대 n개의 문자까지 s1과 s2를 비교한다.
strchr(s, c) 문자열 s안에서 문자 c를 찾는다.
strstr(s1, s2) 문자열 s1에서 문자열 s2를 찾는다.

문자열이 여러 개 있는 경우 며러 개의 문자 배열을 각각 만들어도 되지만 문자열의 배열을 만드는 것이 간편하다. 

//문자열에서 문자 검색
char s[] = "language";	//문자열
char c = 'g';		//찾고자 하는 문자
char *p;		//문자 포인터

p = strchr(s,c);	//str에서 c를 찾는다.

//문자열에서 문자열 검색
char s[] = "A joy that's shared is a joy made double";	//입력 문자열
char sub[] = "joy";		//찾으려고 하는 문자열
char *p;			//문자 검색 위치 저장 포인터

p = strstr(s,sub);		//s에서 sub를 찾는다.

 


https://security-nanglam.tistory.com/194

 

[C언어] scanf()함수에서 &(ampersand)를 쓰는 이유

[&(ampersand)에 대하여] c언어를 시작하면 printf에서는 &를 안썼는데, scanf에서는 &를 쓸때가 있고, 안쓸때가 있다.&의 역할은 무엇이며, &는 언제 쓰는 것일까. &(ampersand)의 역할- &(ampersand(앰퍼샌드))

security-nanglam.tistory.com

 

'lecture > data structure' 카테고리의 다른 글

[lecture] C언어복습.포인터 활용  (0) 2022.12.28
[lecture] C언어복습.포인터  (0) 2022.12.28
[lecture] C언어복습.배열  (0) 2022.12.27
[lecture] C언어복습.구조체  (1) 2022.12.27
[lecture] 자료구조란  (0) 2022.12.27
Comments