📈알고리즘/알고리즘

C언어 공부(2)[문자열 제어, 구조체]

하얀성 2023. 2. 7. 11:48

c언어에서의 Null 값 : \0 

c에서는 문자열 뒤에 \0이라는 null 값을 마지막에 붙이는게 규칙.

gets() 통해 하나씩 배열 안에 다가 값을 집어 넣을 수 있다.

 


string.h 라이브러리를 통해 문자열 관련 메서드를 사용가능.

 

strdup(문자열)은 표준 라이브러리x, 문자열을 복사해서 다른곳에 저장한뒤, 그곳의 주소값을 넘겨줌.

 

아래처럼 words라는 배열안에 각 길이가 다른 문자열들을 저장할 수 있게됨.


srtlen(문자열)은 문자열의 길이를 출력해주는 메서드.

strcmp(문자열1, 문자열2)는 두 문자열을 비교.

왼쪽 값이 사전적으로 더 앞에 있다면 -1, 같다면 0, 오른 쪽 값이 더 사전적으로 앞이라면 1을 출력.

참고로 숫자를 출력하기 때문에  %d를 사용해서 출력했다.

왼쪽이 더 빠르니 -1이 출력된다.


문자열 복사

strcpy(복붙할 문자열, 복사당할 문자열)

포인터를 배열안에서 사용하기 때문에, 더 짧은 길이의 result 배열이 input 배열을 복사해서 출력이 가능하다.

기존 문자열을 덮어쓰고 출력하게 된다.


구조체

 

구조체: 객체 지향 프로그래밍에 말하는 클래의 모체가 되는 것으로, 여러 개의 자료형을 묶어서 새로운 자료형을 만들 수 있는 방법.

(CSS의 클래스처럼 설계해놓은 것들을 가져다가 바로바로 쓸 수 있음. )

 

<예시>

stdlib.h 은  난수생성, 문자열 형식을 다른 형식으로 변환, 의사 난수 생성, 동적 메모리 관리 등의 함수를 포함하고 있다.

구조체의 하위 자료형들의 변수들을 바 불러와서 쓸 수 있다.


 

<예시 2> 입력받아서 출력해보기

 

1.s.name만 앞에 &기호가 없다. 

그 이유는 배열은 그 자체로 포인터의 기능을 가지고 있어 따로 입력받을 때 주소값으로 이어주지 않아도 된다.

 

2. double 형은 입력 받을 때 %Lf 라 써줘야함.

3. float 형은 입력받을 때 %f 라 쓰면됨.


 

<예시 3>두 점 사이의 거리 구하기(구조체로 main에서 변수 선언하고, 구조체의 하위선언 변수 사용하기)

참고: 두 점 사이의 거리 구하는 공식(피라고라스 공식 응용) 

rect 형의 r이라는 사각형은 점2개(좌측 위 점, 우측 아래 점)의 각 좌표(x,y)값으로 이뤄졌으니 css에서 하부 목록 불러오듯이, 계속 하부에 하부 요소를 불러서 쓰고 있는 중임.

 

 

상위의 함수인 구조체 끼리의 비교는 불가.

주석 아래처럼 구조체의 하부 요소끼리의 비교를 다 해줘야 함.

 


구조체의 배열

char 배열에는 한글이 10개 들어 갈 수 있다. 왜냐하면 한글은 2byte씩 잡아먹기 때문.

영어는 1byte씩 잡아 먹어서 20개의 배열 20개의 영어가 입력가능.

 

구조체의 student의 배열 list[]

i번 돌면서 각 배열에 구조체의 각 요소값을 따로따로 입력받음.

 

출처: https://www.youtube.com/watch?v=WpWSD7QR8EA&list=PLRx0vPvlEmdDNHeulKC6JM25MmZVS_3nT&index=16