본문 바로가기

2학년/C

[C]문자와 문자열(2)

문자열 입력받기

 1. fgets() 함수

    이 함수는 scanf()함수와 달리, 파일에서도 문자열을 입력받을 수 있는 함수이다.(키보드+파일) 

    인수로는 문자열을 가리키는 포인터, 문자열의 길이를 넣는 변수, 파일을 가리키는 파일 포인터 등이 있다.

 

 2. scanf() 함수

     stdin(키보드)를 통해 문자열을 입력받는다. 서식지정자로는 %s를 사용하며, 기본적으로 공백문자를 만날 때까지만 입력받는다. 즉, 깁노적으로 공백 다음에 오는 문자열은 저장되지 못하고 유실된다.

 

 

문자열 출력하기

 1. puts() 함수

   stdout인 모니터에 한의 문자열을 출력하는 함수이다. 문자열 출력한 후 자동으로 줄을 바꿔준다

   인수로 문자열을 가리키는 포인터를 전달한다. 

 

 2.fputs() 함수

   모니터뿐만 아니라 파일을 통해서도 문자를 출력하고, 자동으로 줄을 바꿔주지 않는다. 

  인수로는 출력할 문자열을 가리키는 포인터, 문자열을 출력할 스트림 혹은 파일 포인터를 전달한다. 

 

 

문자열 처리함수

  1. 문자열의 길이 : strlen() 

  2. 문자열간 복사 : strcpy(), strncpy()

  3. 문자열간 연결 : strcat(), strncat()

  4. 문자열간 비교 : strcmp(), strncmp()

  5. 문자열간 검색 : strchr(), strstr()

  6. 토큰단위 파싱 : strtok()

  7. 문자열 입출력 : sscanf(), sprintf()

  8. 영어 대소문자 변환 : toupper(), tolower()

  9. 문자열을 숫자로 : atoi(), atol(), atoll(), atof()

 

문자열의 길이 

 <string.h> 헤더에서 정의된 문자열처리 함수로, 매개변수로 전달된 문자열 포인터에 접근한 후, 널문자를 만날 때까지 배열의 길이를 1씩 증가시키다가 널을 만나면 그 즉시 널 문자를 제외한 전체 문자열의 길이를 반환한다. 

 

문자열간 복사

  <string.h> 헤더에서 정의된 문자열처리 함수로 , 문자열 간을 복사기능을 지원한다.

  strcpy() 함수 -- 전체복사

                            두번째로 전달된 포인터로부터 접근하여 널문자를 만날 때까지의 문자열을 첫 번째 매개변수로 전달된 포인터에 덮어씌운다. 

  strncpy() 함수 -- 부분 복사 

                               세번째 매개변수로 복사할 문자열의 최대 길이를 지정할 수 있다. 

 

문자열간 연결

  <string.h> 헤더에서 정의된 문자열처리 함수로, 문자열 간을 연결기능을 지원한다. 

   strcat() 함수 -- 전체연결

      문자열 원본의 끝에 전달된 문자열의 복사본을 이어붙인다.  *주의: 배열 오버플로우 발생 가능성 있음

  strncat() 함수 -- 부분 연결

      위의 함수 기능에 + 추가할 문자열 최대길이를 지정할 수 있다. 널 문자를 만나거나 추가하는 문자의 개수가 세 번째 매개변수로 전달된   최대 길이에 도달할 때까지 추가를 계속한다. 

 

 

문자열간 비교

 <string.h> 헤더에서 정의된 문자열 처리 함수이며 비교하는 기능을 지원한다. 

 strcmp() -- 전체비교

           두 개의 문자열 포인터를 전달ㅂ다아, 해당 포인터가 가리키는 문자열의 내용을 서로 비교한다. 

           같으면 0을, 다르면 처음으로 달라진 인덱스 i에 대해 값을 반환한다. 

 

 strncmp() -- 부분비교 

               세번째 매개변수로 비교할 문자의 개수를 지정할 수 있다. (앞의 두가지는 동일) 

               일치하지 않는 문자를 만나거나, 지정한 문자의 개수만큼 비교를 계속한다. 

문자열간 검색

 <string.h> 헤더에서 정의된 문자열 처리 함수로, 문자열 내에서 문자 혹은 문자열을 탐색하는 기능을 지원한다. 

 strchr() -- 문자열 내에 일치하는 문자 여부 확인

               탐색 대상의 문자열 시작 포인터, 비교할 문자를 인수로 받고, 존재할 시 처음으로 발견한 지점의 포인터를 반환한다. (없으면 널) 

 strstr() -- 문자열 일치하는 구간의 여부 확인 

                탐색 대상의 문자열 , 탐색 기준이 될 문자열과 일치하는 구간이 있는지 확인하는 함수이고, 있다면 해당 위치의 포인터를 반환한다. (없으면 널) 

 

 

토큰단위 파싱

 strtok() 함수는 <string.h> 헤더에서 정의된 문자열처리 함수로, 문자열 내에서 토큰을 기준삼아 파싱하는 기능을 지원한다. 

 문자열 포인터, 토큰을 전달받은 후, 문자열 포인터를 이용해 문자열을 순회해가며 구분자와 동일한 부분을 만나면 널 문자를 대입한다. 그리고 처음 입력받은 포인터로부터 널 문자를 삽입한 부분 바로 앞까지를 새로운 문자열로 취급하고, 그 문자열 시작 포인터를 반환한다. 

문자열 입출력

   <stdio.h> 헤더에서 정의된 문자열 입출력 함수이다.

    sscanf()함수 

     입력을 가져올 문자열, 서식지정자, 저장할 변수 주소 순으로 사용한다.  이 함수는 사용자가 직접 입력하는게 아닌, 시스템에서 존재하는 문자열을 기준으로 입력을 대체할 수 있다. 

 

   sprintf() 함수

    출력을 저장할 문자열, 서식지정자, 저장할 변수 주소 순으로 사용한다.

 

 

영어 대소문자 변환

 <ctype.h>헤더에서 정의된 단일문자 처림하수로, 하나의 문자를 입력받으면 ascii가 65~122 안에 있는지 확인하고 대문자 혹은 소문자로 변환해준다.

 toupper ->소문자를 대문자로

 tolower ->대문자를 소문자로 

문자열을 숫자로

 <stdlib.h> 헤더에서 문자 ->숫자 처리함수로, 문자열을 매개변수로 전달하면 함수 종류에 따라 적절한 타입으로 변환해준다.

 atoi(int) / atol(long) / atoll(long long)  / atof(double)

 

'2학년 > C' 카테고리의 다른 글

[C] 전처리기  (0) 2023.08.05
[C] 입출력  (0) 2023.08.03
[C]문자와 문자열(1)  (0) 2023.08.01
[C]함수(2)  (0) 2023.07.31
[C]함수(1)  (0) 2023.07.30