본문 바로가기

반응형

Programming/C,C++

(12)
[자료형 변환] string to int, string to double string
[C++ / 구조체 생성자] 구조체를 이름 없이 사용하고 간단하게 값을 할당하고 싶을 때 다음을 구조체 생성자라고 한다. coordinate(double dI, double dJ) : typedef struct coordinate { coordinate(double dI, double dJ) : i(dI), j(dJ) {} double i; // i == y == v == row double j; // j == x == u == col }dCoordinate; 다음과 같이 선언하면 dI를 i에 넣고, dJ를 j에 할당하겠다는 뜻이고, 클래스의 생성자 처럼 사용이 가능하다. 즉, coordinate 구조체를 사용할 때 원래 다음과 같이 사용했다면 구조체 생성자를 이용하면 다음과 같이 초기화가 가능하다. 그리고 이는 객체이름을 따로 설정할 필요가 없을 때, 다음과 같이 사용할 수 있어서 편리하다..
[C++] 자료형 변환(char* => int, int => char*, int => char, char => int) char* => int int => char* int => char char => int 로 변환하는 예제를 하나의 main문 안에 모두 정리한다. #include using namespace std; int main() { // int ==> char* int x = 1234; char buf[256]; sprintf_s(buf, "%d", x); // QT에서는 sprintf로 해도 된다. printf("%s\n", buf); // char* ==> int char buffer[256] = "456123"; int num = atoi(buffer); printf("%d\n", num); // char ==> int char ch = '9'; int i = ch - '0'; printf("%d\n", ..
[C/C++] 문자열 엔터까지 한번에 받기(공백 포함해서 받기) + 문자열 파싱 char getStr[128]; scanf("%[^\n]s",getStr); // get 1 line until get enter 위는 문자열을 엔터까지 한번에 받기 예제이다. 그리고 아래는 위 예제를 이용해서 문자열을 엔터까지 한번에 받고나서 문자열을 띄어쓰기 단위로 파싱한 예제이다. char getStr[128]; scanf("%[^\n]s",getStr); // get 1 line until get enter char *tmpPtr = strtok(getStr," "); // for parsing char *str[10]; // parsing and save commands int i = 0; while(tmpPtr != NULL) // parsing command and option { str[i..
[char형 배열과 string] 문자배열과 문자열 의 차이 자료형 string 은 기본 자료형이 아니라 객체이다. char형 배열은 기본 자료형이다. string은 객체이기 때문에 c언어에 없다. c++부터 제공하는 클래스이다. 차이 string은 마지막에 \0을 담지 않는다. 즉, string은 문자열의 마지막을 null문자로 구분하는것이 아니다. char형 배열은 마지막에 \0을 담는다. 즉, char형 배열은 \0로 문자열의 마지막을 구분한다. string은 애초에 '\0'을 담지 못한다. 그러나 char형 배열은 '\0'을 사용자가 임의로 넣을 수 있다. 따라서 char c[] = "app\0le" 이라고 선언후 출력하면 app까지만 출력된다. 사용자가 임의로 넣은 \0을 보고서 문자열의 마지막이라고 판단하기 때문이다. string과 char[]를 구분해..
[char*, char[], const char* ] 문자열 상수, 문자열 변수 이해 char* s1 = "abc"; char s2[] = "abc"; 위의 s1,s2는 어떻게 다를까? 언뜻 보기에 다르지만 완전히 다르다. 결론적으로 말하자면 s1은 문자열 상수, s2는 문자열 변수이다. 컴파일 하면서 s1이 가리킬 "abc"는 정적영역에서 생성되고 정적영역에서의 "abc"의 시작주소를 s1에 넣는다. s2는 힙영역에 "abc"가 생성되고 그 시작주소를 s2에 넣는다. s2가 우리가 익히 알고있는 변수, 혹은 포인터 방식이다. s1은 정적영역에 생성되었기 때문에 s1의 값을 바꾸지 못한다. 즉, 상수가 된것이다. 그러나 s1이 가리키는 대상은 바꿀 수 있다. 왜냐?? 근본적으로 s1은 포인터이기 때문이다. 포인터라서 가리키는 대상은 바꿀 수 있지만, "abc"는 정적영역에 있기때문에 바꾸..
[C++ 소켓 스레드통신] 스레드클래스를 직접 만들고 소켓통신 구현하기 이 후 전체소스는 천천히 첨부하겠다.
[C/C++] 배열과 벡터 속도차이 비교 테스트 백준문제를 풀다가 배열복사와 벡터복사의 속도차이가 궁금해져서 테스트를 해보았다. 각각 100 x 100 짜리 이차원 배열, 벡터를 만들어서 1000번씩 복사하는 작업을 수행하고 시간을 재서 속도차이를 비교해보았다. 다음과 같이 테스트소스를 구성하였다. // 배열복사와 벡터복사 속도차이 비교하는 중이었는데 벡터가 훨씬 느리다. #include #include #include using namespace std; #define N 100 int main() { // 100x100 arr int arrOrg[N][N] = { 0 }; clock_t start = clock(); int arr[N][N]; for (int k = 0; k < 1000; k++) { for (int i = 0; i < N; i++..

반응형