코딩 56일차 C/C++

마스터피스·2023년 12월 7일
0

C/ C++ 

목록 보기
28/35
post-thumbnail
  1. std::string

1-1 std::string::c_str()

-std::string을 우리가 사용하는 printf 함수를 이용해서 출력하기 위해서는 const char 데이터 타입으로 변환할 필요가 있다. 이 경우에 std::string을 const char 로 변환하기 위해서는 멤버함수인 c_str() 함수를 호출하면 const char*를 받아올 수 있다.

예제코드)

방법 1) c_str() 함수를 사용해 출력하는 방법

#define _CRT_SECURE_NO_WARNINGS

#include <cstdio>
#include <cstring>
#include <string>

int main() {
    std::string myStr = "Hello World";
    myStr = myStr + " Hello C++";

    printf("%s", myStr.c_str());

    return 0;
}

방법 2) std cout을 사용 /
2-1) include isostream를 한다.
2-1) std::cout << myStr;
예제)

#define _CRT_SECURE_NO_WARNINGS

#include <cstdio>
#include <cstring>
#include <string>
#include <iostream>	

int main() {
    std::string myStr = "Hello World";
    myStr = myStr + " Hello C++";

    std::cout << myStr;

    return 0;
}

//방법 1을 주로 사용할 예정
문자열 두개 만드는 예제)

2.std::string::compare(...)

  • std::string에는 여러 가지 함수가 있습니다. compare 함수는 strcmp를 대체하는 함수로서
  • 이 함수를 활용하게 되면 문자열의 비교를 할 수 있게 됩니다.
  • 이 외에도 std::string 클래스 내부에는 여러가지 활용 가능한 멤버 함수가 있습니다.

예제함수)

#define _CRT_SECURE_NO_WARNINGS
#include <cstdio>
#include <string>
#include <iostream>

int main() {
    std::string str1 = "apple";
    std::string str2 = "banana";

    if (str1.compare(str2) == 0) {
        printf("두 문자열은 같습니다.\n");
    }
    else {
        printf("두 문자열은 다릅니다.\n");
    }


    return 0;
}

3.namespace

-네임스페이스는 번역하게 되면 이름 공간입니다. 이는 여러 개발자들이 함께 개발하기 위해 만들어진 개념으로서 각각의 개발자가 다른 이름 공간을 사용하여 개발하게 되면 같은 이름이 존재한다고 하더라도 컴파일에서 충돌이 일어나지 않게 됩니다. 실제로 이름 공간을 끝단 개발자가 자주 활용하지는 않지만. 자신의 라이브러리나 소스코드를 누군가와 공유하고, 혹은 오픈소스 라이브러리를 활용하기 위해서는 이름 공간에 대한 개념을 정확하게 알아두고 있어야 합니다.

예제함수)

#define _CRT_SECURE_NO_WARNINGS
#include <cstdio>
#include <string>
#include <iostream>


namespace hong {
    void foo() {
        printf("홍길동이 만든 함수 foo()입니다.\n");
    }
}

namespace kim {
    void foo() {
        printf("김말똥이 만든 함수 foo()입니다.\n");
    }
}

int main() {
    hong::foo();
    kim::foo();

    return 0;
}

번외)
아래와 같이 몸체와 따로 분리 가능하다.

  #define _CRT_SECURE_NO_WARNINGS
  #include <cstdio>
  #include <string>
  #include <iostream>


  namespace hong {
      void foo();
  }

  namespace kim {
      void foo() {
          printf("김말똥이 만든 함수 foo()입니다.\n");
      }
  }

  int main() {
      hong::foo();
      kim::foo();

      return 0;
  }

  void hong::foo() {
      printf("홍길동이 만든 함수 foo() 입니다.\n");
  }

예제2)

#define _CRT_SECURE_NO_WARNINGS
#include <cstdio>
#include <string>
#include <iostream>
#include <vector>

//네임스페이스를 생략하는 방법 이 코드 아래부터는 네임스페이스를 생략하겠다는 의미
using namespace std;

namespace hong {
    void foo();
}

namespace kim {
    void foo() {
        printf("김말똥이 만든 함수 foo()입니다.\n");
    }
}

int main() {
    //std : 스텐다드 네임스페이스 -> C++에서 기본으로 제공하는 함수에서 제공
    string myStr = "Hello World";

    printf("%s", myStr.c_str());


    return 0;
}

void hong::foo() {
    printf("홍길동이 만든 함수 foo() 입니다.\n");
}

4.레퍼런스(Reference) 타입

  • 파라미터에서의 레퍼런스 타입은 값 복사를 막고 그 값을 그대로 인자로 전달하게 해 주며, 이를 통해 함수를 호출할 때 일어나는 파라미터에서의 값 복사를 막아주게 되고 이를 이용해 더 빠른 실행속도를 만들어낼 수 있게 됩니다.

예제)

#define _CRT_SECURE_NO_WARNINGS
#include <cstdio>
#include <string>

// int& 로 사용한다면 변수를 그대로 가져온다. 
// 1.포인터 타입으로 사용하지 않는 이유는 std는 포인터 타입으로
// 사용되지 않는다.(동적할당으로 사용 되지 않음) 그렇기 때문에 
// &를 활용해 값 자체를 사용하는 것을 사용한다.
// 2.값복사가 최소한으로 된다
// 
void swap(std::string& a, std::string& b) {

    std::string temp;
    temp = a;
    a = b;
    b = temp;

}


int main() {
    std::string value1 = "Hello";
    std::string value2 = "Wolrd";

    swap(value1, value2);

    printf("value1 : %s\n", value1.c_str());
    printf("value2 : %s\n", value2.c_str());

    return 0;
}
profile
코딩 일지

0개의 댓글