문자열(character string)
널 문자 (\0) 로 끝나는 char형 배열
배열과 포인터의 차이
char heart[]
char *head
배열 이름 heart 는 상수
포인터 head 는 변수
head와 heart를 일치시키려고 할 때
head = heart; (o)
heart = head; (x)
문자열 입력
읽을 문자열을 저장하기 위한 공간을 할당해야한다.
char words[STRLEN];
gets()
개행 문자에 도달할 때까지 한 줄을 전부 읽고, 개행 문자를 제거하고 c 문자열을 만들기 위해 널 문자(\0)를 추가하여 남은 문자를 저장한다.
gets(words);
fgets()
파일 입출력
읽을 문자들의 최대 개수를 지정함으로써 두 번째 전달인자를 취할 떄 생길 수 있는 오버플로 문제를 해결
최대 개수를 지정하기 위해 두 번째 전달인자로 사용한다.
전달인자가 n이라면 n-1개까지 문자를 읽거나 개행 문자가 나올 때까지 읽는다.
fgets(words, STRLEN, stdin);
fgets(words, stdout)
gets_s()
개행을 읽는 경우 개행 문자를 저장하는 대신 버린다.
c라이브러리의 선택적 확장이기 때문에 입력이 예상을 밋나갈 경우, fgets() 보다 덜 편리하고 유연하지 못하다.
gets_s(words, STRLEN)
s_gets()
용량을 초과하는 입력을 만나도 표시가 나지 않는다.
char * s_gets(char * st, int n){
:
f_gets(st, n, stdin);
:
}
scanf()
단어 입력 함수
화이트스페이스 문자(스페이스, 탭, 개행)까지 읽는다.
문자열 출력
puts()
문자열을 출력할 때 자동으로 개행을 추가해서 각 문자열은 한 라인씩 차지하고 있다.
fputs()
출력할 타깃 파일을 지정하기 위해 두 번째 전달인자를 사용한다.
출력에 개행을 자동으로 추가하지 않는다.
printf()
문자열 주소를 전달인자로 사용한다.
문자열 함수
strlen()
문자열의 길이
strcat()
문자열 결합
두 번째 문자열의 복사본이 첫 번째 문자열의 뒤에 덧붙고 결합된 문자열이 새로운 첫 번째 문자열이 된다.
두 번째 문자열은 바뀌지 않는다.
strncat()
strncat(bugs, addon, 13)
addon문자열의 내용을 bugs에 추가한다.
문자 개수가 13개에 도달하거나 널 문자를 만나면 멈춘다.
strcmp()
문자열과 비교
<string.h>에서 선언한다.
리턴값
첫 번째 문자열이 두 번째 문자열보다 알파벳 순서로 앞에 오면 음수
("A", "B") -1
("Z". "a") -1
뒤에 오면 양수
("B", "A") 1
같으면 0
("A", "A") 0
apple과 apples를 비교할때
문자 s와 널 문자를 배교해야한다
널 문자는 ASCII 시퀀스에서 첫 번째 문자이기 때문에, 양수를 리턴한다.
strncmp()
대응하는 두 문자가 일치하지 않는 문자 쌍을 찾을 때까지 문자열들을 비교한다.
strcpy()
문자열 복사
strcpy(qwords[i], temp)
두 번째 전달인자(temp)가 가리키는 문자열이 첫 번째 전달인자(qwords[i])가 가리키는 배열로 복사된다.
복사본을 타깃(target)이라고 하고, 원래의 문자열을 소스(source)라고 한다.
타깃 문자열은 왼쪽, 소스 문자열은 오른쪽
char *형이다
첫 번째 전달인자의 값 문자의 주소를 리턴한다.
strncpy()
더 안전하게 문자열을 복사한다
복사할 최대문자개수를 지정하는 세 번째 전달인자를 사용한다.
strintf()
string.h와 stdio.h에 선언되어 있다.
printf()와 비슷하다
여러항목들을 하나의 문자열로 결합하는 방법을 제공한다.
첫 번째 전달인자는 타깃 문자열의 주소이다.
나머지 전달인자들은 printf()와 동일하다.
포맷 문자열이 먼저 나오고, 출력할 항목들의 리스트가 뒤따른다.
문자열 정렬하기
선택 정렬(selection sort)
전체 배열을 스캔하여 가장 큰 수를 찾고 첫번째 원소와 바꾼다.
나머지 배열을 스캔하여 가장 큰수를 찾아서 두번째 원소와 바꾼다.
:
문자열을 수로 변환하기
수를 문자열로 저장한다는 것은 수치문자(digit character)로 저장한다.
213은 '2', '1' ,'3', '\0' 으로 저장될 수 있다.
atoi()
stdlib.h 헤더 파일에 선언되어 있다.
정수 부분이 아닌 것을 만날 때까지 그 앞의 문자들만 변환한다.
atof()
문자열을 double형 값으로 변환한다.
atol()
문자열을 long형 값으로 변환한다.
strtol()
문자열을 long형으로 변환한다.
stroul()
문자열을 unsigned long형으로 변환한다.
strtod()
문자열을 double형으로 변환한다.
strtol() 과 stroul()은 진수의 기수(number base)을 지정하는 것도 허용한다.
'primer plus' 카테고리의 다른 글
[c primer plus] chapter10 배열과 포인터 (0) | 2023.01.06 |
---|---|
[c primer plus] chapter08 문자 입출력과 입력 유효성 검사 (0) | 2023.01.05 |
[c primer plus] chapter09 함수 (0) | 2023.01.05 |
[c primer plus] chapter07 C의 제어문: 분기와 점프 (0) | 2023.01.03 |
[c primer plus] chapter05 연산자, 표현식, 문장 (0) | 2023.01.02 |