알고리즘 study -6-

한창희·2021년 6월 30일
0

algorithm study

목록 보기
6/26

<문자형 변수>

-> 문자 하나를 담는다 && 출력형식 = %c


컴퓨터는 문자를 숫자로 저장한다 -> 아스키 코드

ex> char x = 'a';
'a'에 대응하는 아스키 코드값이 x에 들어있다!!

하나의 문자는 하나의 아스키 코드를 가지고 있다

printf("%c", x) --> 출력 시 아스키코드 값에 대응하는 문자 를 출력한다

printf("%d", x) --> 출력 시 아스키코드 값에 대응하는 정수 를 출력한다


<문자열>

fgets 사용법
-> fgets(str, num, stream)

ex> fgets(str, 1000, stdin)

str : 읽어들인 문자열을 저장할 char 배열을 가리키는 포인터

num : 마지막 NULL 문자를 포함하여, 읽어들일 최대 문자 수
         이 값이 15라면 최대 14개 문자를 입력 받는다

stream : 표준 입력(stdin)에서 입력을 받으려면 여기에 stdin을 써주면 된다


문자열 -> 문자만으로 이루어진 배열

ex> char str[10];


문자열 저장 시 char형 배열의 크기 지정하지 않으면 자동으로 마지막 배열에 '널 문자'가 저장된다

#include <stdio.h>

int main() {

  char myString[10];
  
  myString[0] = 'h';
  myString[1] = 'e';
  myString[2] = 'l';
  myString[3] = 'l';
  myString[4] = 'o';
  
  myString[5] = '\0';  // 마지막에 널 문자 넣어서
                    //문자열이 끝임을 명시적으로 얘기해줘야함
  
  printf("%s\n", myString);
  
  char myString2[] = "hello";
  // 널 문자 고려해서 공간 6개를 잡는다
  
  return 0;
}

<문자열 관련 함수>

X, A, B = 문자열 변수

  • strlen(X) : X의 길이 반환 (널 문자 제외)
  • strcmp(A,B) : A와 B가 같은지 판단
  • strcpy(A,B) : B를 A에 복사

<strlen 함수 직접 구현>

-> '\0' 을 찾는다

#include <stdio.h>
#include <string.h>    // 추가해줘야 함

int main() {

  int len = 0;

  char myString[100];
  scanf("%s", myString); // 문자열 입력받을 시 & 없음!
  
  // %s 는 띄어쓰기 이전까지 입력 받는다
  // 띄어쓰기 포함은 fgets 사용해보기
  
  while(1){
    if(myString[len] == '\0'){
      break;
    }
    len++;
  }
  
 
  printf("%d\n", len); 
  
  printf("%d\n", strlen(myString));
  
  // 동일한 값이 출력된다

  return 0;
}

<strcmp 함수>

-> 두 문자열이 같은지 비교

  • 길이 같아야 함
  • 위치별 문자가 같아야함

ex> strcmp(A, B)
1. 두 문자가 같으면 0 반환
2. A가 B보다 사전순으로 앞에 있으면 음수 반환
3. A가 B보다 사전순으로 뒤에 있으면 양수 반환

<strcmp 함수 구현>

#include <stdio.h>
#include <string.h>

int main() {

  char A[100], B[100];
  
  scanf("%s", A);
  scanf("%s", B);
  
  int lenA, lenB;
  
  lenA = strlen(A);
  lenB = strlen(B);

  if(lenA == lenB){
    bool flag = false;
    
    for(int i = 0; i < lenA; i++){
      if(A[i] != B[i]){ // 문자 하나라도 다르면 flag true 된다
        flag = true;
      }
    }
    if(flag){
      printf("Different!\n");
    }else{
      printf("Same!\n");
    }
    
  }
  else{
    printf("Different!\n");  
  }
  
  printf("\n");
  printf("Use strcmp\n");
  
  if(strcmp(A, B) == 0)
    printf("Same!\n");
  else
    printf("Different!\n");
  
  return 0;
}



<strcpy 함수 직접 구현>

strcpy(A, B) -->> 문자열 B를 A에 복사 (널 문자까지 같이)

#include <stdio.h>
#include <string.h>

int main() {

   char A[100];
   char B[100];
   
   scanf("%s", A);
   scanf("%s", B);
   
   int lenB = strlen(B);

   for(int i = 0; i < lenB; i++){
     A[i] = B[i];
   }
   
   A[lenB] = '\0';  // 마지막에는 널 문자 넣어주기
   
   printf("%s\n", A);
   printf("%s\n", B);
   
   
  return 0;
}

// strcpy 사용

#include <stdio.h>
#include <string.h>

int main() {

   char A[100];
   char B[100];
   
   scanf("%s", A);
   scanf("%s", B);
   
   strcpy(A, B);  // 문자열 B를 A에 복사
   
   printf("%s\n", A);
   printf("%s\n", B);
   
   
  return 0;
}

<문자열 입력 tip>

ex> char arr[100];

scanf("%s", arr);

-> 문자열 입력 받을 때 enter, tab, space 누를 때까지의 문자열 입력된다

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

fgets(arr, 입력받을 수 있는 최대 문자수, stdin)

-> 엔터키가 입력되기 전까지 모든 문자열(공백 포함)이 입력된다


profile
매 순간 최선을 다하자

0개의 댓글

관련 채용 정보