본문 바로가기

프로그래밍/자료구조

문자열

http://blog.naver.com/wlsgkr91/220897001854

문자열 
-문자열은 char타입의 배열의 각 칸마다
문자 하나씩 저장된다. 

문자열 배열
char str[6];
문자열의 마지막은 null이 저장되어있다.
문자열의 끝을 표시하는 역할을 한다. 
즉 배열의 크기가 문자열의 길이보다 적어도
1만큼 길어야한다.

문자열을 생성하는 편리한 방법을 제공한다.
1.char str[] = "hello";
   -hello와  null 값으로 저장된 char형 배열.
    변경이 가능하다. 
2.char *str = "hello"; 
  -String literal  수정이 불가하다.


string.h라이브러리 주요함수

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

이외에도 라이브러리에 더 많은 함수가 있다. 
*문자열을 출력할시 마지막 null의 값을 
주어야 printf 할 시에 어디까지가 문자열의 
끝인지 알 수 있다.

ex)

int main(){ 

  char *words[100]; 
  char buffer[BUFFER_SIZE]; 
  int n = 0; //number of strings 
  while(scanf("%s",buffer) != EOF){ 
  words[n]== buffer;
    n++;              
     } 
}

scanf("%s",buffer)
-문자열은 scanf에 &을 붙이지않고 쓴다.
words[n]== buffer;
-사용자로부터 하나의 단어를 입력받아서 
 words[n]에 저장

사용자가 입력할 단어를 buffer이라는 배열에
저장했다. 
buffer은 길이가 100인 문자열 배열의
시작주소를 저장하는 포인터 변수이다. 

words[n]== buffer;
-buffer이 가진 포인터 주소 값을 words[n]에
저장한다. n이 증가해도 buffer에 저장된 하나의 문자열이 계속해서 저장된다. 

즉 buffer는 처음에 입력된 단어는 지워지고 
두번째 입력되는 단어가 새로이 저장된다. 
그럼 words[0]에도 buffer의 주소, 
        words[1]에도 buffer의 주소가 저장된다.
그러므로 buffer에 마지막으로 입력한 값이
words[n]에 모두 저장된다. 

따라서 buffer에 저장된 이전의 값들을 
따로 copy해야 한다. 

words[n]== strdup(buffer);
//strcpy(str2,str1) str1을 str2로 복사
//strdup 매개변수를 받아서 이 매개변수의
  복제본을 만든다. 


파일로부터 읽기 

#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); 
} 

오픈한 파일로부터 문자열을 하나씩 읽어온다. 
그리고 출력.

파일 읽고 쓰기 

#include <stdio.h> 

void main(){ 

  FILE * in_fp = fopen("input.txt,"r"); 
  FILE * out_fp = fopen("input.txt,"w"); 
  char buffer[100]; 
  while(fscanf(fp,"%s",buffer) != EOF) 
  fprintf(out_fp,"%s",buffer); 
  fclose(in_fp); 
  fclose(out_fp); 
}