2020. 4. 25.

[자료구조] 인프런 2. 문자열 강의 정리


*문자열

문자열은 char타입의 배열의 ' 칸마다 문자 하나씩 저장됨

char str[6];
str[0]='h';
str[1]='e';
str[2]='l';
str[3]='l';
str[4]='o';
str[5]='\0';
null character('\0')는 문자열의 끝을 표시하는 역할을 한다.
즉 배열의 크기가 문자열의 길이보다 적어도 1만큼 길어야 한다


c언어는 문자열을 생성하는 편리한 방법을 제공

char str[] = "hello";
혹은
char *str = "hello";
하지만 이렇게 정의된 문자열은 수정이 불가능하다는 점에서 위의 두 방법과 다르다. 이것을 string literal이라고 부른다.

*string.h 라이브러리 함수

string.h 라이브러리는 문자열을 다루는 다양한 함수를 제공

strcpy 문자열 복사
strlen 문자열 길이
strcat 문자열 합치기
strcmp 문자열 비교

*문자열들의 저장

여러개의 단어들을 포인터를 이용하여 아래 그림과 같이 저장해보자.


하나의 단어자체가 문자열로 저장됨
하나의 배열의 칸에 단어가 들어간다
단어는 배열로 구성되 있다.

입력받은 마지막 값이 모든 배열에 저장된다.

char *words[100];
int n=0; // number of strings
char buffer[BUFFER_SIZE];

while(n<4 amp="" buffer="" eof="" p="" s="" scanf="">
words[n] = buffer;
// 문제는 문장이다.
// 처음 입력받은 단어가 지워짐
// words[n]=strcpy(?,buffer);
// strcpy 매개변수가 두개 필요함으로 새로 받을곳을 찾아줘야한다.
// words[n]=strdupy(buffer);
// 표준함수는 아니나 이렇게 사용이 가능함.
// 복제본을 만들어서 word[n] 저장해줌
n++;
}

for (int i =0; i < 4; i++)
printf("%s\n",words[i]);

*문자열 복사: strdup


char * strdup(char *s)
{
char *p;
p =(char *)malloc(strlen(s)+1);
if(p !=NULL)
strcpy(p,s);
return p;
}

*파일로부터 읽기
include

void main(){
file * fp =fopen("input.txt","r");
// 파일의 입출력을 위해서는 fopne을 이용해서 열어야한다.
// 오픈모드 r 은 읽기만한다는것이다.
// fp 파일 포인터에 넣는다.
char buffer[100];
while(fscanf(fp, "%s", buffer) != EOF)
// input.txt에서 읽어온 파일로부터 문자열을 하나씩 읽어서
// 출력해주는것이다.
printf("%s', buffer);
fclose(fp);
// 볼일이 끝나면 항상 닫아줘야한다.
}

*파일 읽고 쓰기

include

void main(){
file * in_fp =fopen("input.txt","r");
file * out_fp =fopen("output.txt","w");
char buffer[100];
while(fscanf(in_fs, "%s", buffer) != EOF)
//fscnaf 파일로부터 읽을때 사용한다.
fsprintf(out_fp,"%s", buffer);
fclose(in_fp);
fclose(out_fp);
}


댓글 없음:

댓글 쓰기