Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- gan
- 조건문
- VGG-M
- 파일읽고쓰기
- ChatGPT
- springboot
- VGG-F
- 김영한스프링부트
- 스프링입문
- 이미지생성
- 자바
- strdup
- 자료구조
- VGG-S
- C언어로쉽게풀어쓴자료구조
- 다차원
- inflearn
- C
- Intellij
- 다차원배열순회
- 오븐시계
- 김영한
- 시간복잡도
- 백준
- 웹기초
- vgg
- 스프링기초
- 포인터
- 배열
- 문자열
Archives
- Today
- Total
YUIN
자료구조 2 [문자열] 본문
1. 문자열 (string)
- 문자열은 char 타입의 배열의 각 칸마다 문자 하나씩 저장된다
char str[6];
str[0] = 'h';
str[1] = 'e';
str[2] = 'l';
str[3] = 'l';
str[4] = 'o';
str[5] = '\0';
해당 코드는 문자열 hello를 생성한다.
이때, null character('\0')는 문자열의 끝을 표시하는 역할을 한다. 즉 배열의 크기가 문자열의 길이보다 적어도 1만큼 길어야 한다는 것이다. 또한 코딩에서 문자열의 시작은 0부터임에 주의하자.
위의 코드는 아래의 코드와 같은 의미를 가지게 된다.
char str[]="hello";
char *str="hello";
char *str="hello";
마지막 코드와 같이 정의된 문자열은 수정이 불가능하다는 점에서 첫번째, 두번째 코드와 차이 갖는다.
마지막 코드를 string literal 이라고 부르는데, 일반적으로 literal은 수정이 불가능하다는 뜻을 가진다.
2. string.h 라이브러리 함수
- string.h 라이브러리는 문자열을 다루는 다양한 함수를 제공한다.
strcpy (string copy): 문자열 복사
strlen (string length): 문자열의 길이
strcat (string concatenation): 문자열 합치기
strcmp (string compare): 문자열 비교
3. 문자열들의 저장
- 여러 개의 단어들을 포인터를 이용하여 아래 그림과 같이 저장해보자
답:
#include <stdio.h>
#define BUFFER_SIZE 100
int main(){
char* words[100];
int n = 0; //number of strings
char buffer[BUFFER_SIZE];
while (scanf("%s", buffer) != EOF) //scanf("%d,&a)
//위 코드에서 buffer 앞에 &가 붙지 않는 이유?
//buffer 배열의 이름이 실제 그 배열의 주소를 저장하고 있는 포인터 변수이기 때문
//EOF: end of file
words[n] = strdup(buffer);
n++;
}
3. 문자열 복사: strdup
char* strdup(char* s)
{
char* p;
p = (char*)malloc(strlen(s) + 1);
if (p != NULL)
strcpy(p, s);
reutrn p;
}
- 매개변수로 받은 하나의 문자열을 복제하여 반환한다.
4. 파일로부터 읽기
-읽기(r)
#include <stdio.h>
void main(){
FILE *fp =fopen("input.txt","r");
char buffer[100];
while(fscanf(fp,"%s",buffer) != EOF)
printf("%s",buffer);
fclose(fp);
}
-읽고 쓰기(r,w)
#include <stdio.h>
void main() {
FILE * in_fp = fopen("input.txt", “r");
FILE * out_fp = fopen("output.txt", "w");
char buffer[100];
while (fscanf(in_fp, "%s", buffer) != EOF)
fprintf(out_fp, ”%s ", buffer);
fclose(in_fp);
fclose(out_fp);
}
'자료구조' 카테고리의 다른 글
C 언어로 쉽게 풀어 쓴 자료구조 1장 자료구조와 알고리즘 (4) | 2023.12.26 |
---|---|
자료구조 5 [전화번호부.v2] (0) | 2023.08.22 |
자료구조 4 [전화번호부.v1] (0) | 2023.08.15 |
자료구조 3 [문자열 예제] (0) | 2023.08.08 |
자료구조 1 [배열, 포인터, 문자열, 동적메모리할당] (0) | 2023.07.31 |