[Arduino/C++] 시리얼 모니터 데이터 공백구분으로 입력받기, 명령어 처리

프로그래밍/C++ 2022. 11. 12. 21:03

// 생성자의 여러번 호출을 막기 위해 전역 변수로 String 변수 2개를 호출한다. String input; String args; void setup() { Serial.begin(9600); } void loop() { //시리얼 데이터가 들어왔을때 (버퍼에 내용이 채워졌을때) 작업 if(Serial.available() > 0) { input = Serial.readStringUntil('\n'); //엔터까지 입력받기 Serial.println("INPUT : " + input); for(int i = 0; i < input.length(); i++ ) { char c = input[i]; //공백이 아닌경우만 문자열에 결합시킨다. (담아준다.) if(c != ' ') { args.concat..

Article Thumbnail
[C++] 연산자 오버로딩 (Operator Overloading)

프로그래밍/C++ 2022. 11. 9. 00:55

* 본 글을 읽기 전에 미리 구조체와 C++의 Class 개념에 대해 미리 알고 학습을 하는 것을 권장드립니다. 일반적으로 C언어에서 사용하는 +, -, ==, [] 와 같은 기본 연산자들은 모두 C언어에서 기본적으로 정의 되어 있는 데이터 타입 (int, double, char 등) 에서만 사용 가능한 연산이였기에, 사용자가 정의해서 만든 타입인 구조체로 만든 구조체 변수의 경우 이러한 연산자를 적용할 수 없었습니다. #include struct point{ int x; int y; }; int main(){ struct point pos1 = {10,20}; struct point pos2 = {20,40}; if(pos1 == pos2){ //오류 발생 printf("same"); } return ..

Article Thumbnail
[C++] infix -> postfix 수식 변환 & 계산기 구현

프로그래밍/C++ 2022. 10. 30. 23:08

* 해당 글은 구현을 단순히 기록차 남겨놓은 후기 글 입니다 강의글이 아니므로 따로 자세한 설명을 넣진 않습니다. 자세한 구현 방식은 나중에 자료구조 탭을 추가하여 제대로 작성할 예정입니다. C++ 에서 infix 수식 (중위 표기법) 을 받아서 postfix 수식 (후위 표기법) 으로 변환 후 그 postfix 수식에 대한 값을 계산해 결과값을 출력하는 기능을 구현했습니다. 뭐 이번에도 과제때문에 억지로 구현한거긴 합니다. 사실 프로그래밍을 하면서 일반적으로 리터럴에 적는 여러가지 수식들은 자연스럽게 컴퓨터가 읽어내 계산할 수 있도록 컴파일러가 처리해줍니다만, 실제로 수식 문자열을 입력받아서 계산하는 기능은 생각보다 굉장히 어려운 기능입니다. (당장 수식을 계산하는 방법을 머리 속으로 생각해보면, 정수..

Article Thumbnail
[C++] 모든 인자값을 레퍼런스로 넘겨야 성능상 유리할까?

프로그래밍/C++ 2022. 10. 27. 01:14

일반적으로 C++에서 레퍼런스를 인자로 받으면, 참조하는 타입의 모든것을 복사하는게 아닌 주소 한번을 넘김으로써 원본에 접근할 수 있어, 포인터 처럼 성능상의 이점을 취할 수 있습니다. 그러면 생각해낸게 "아 그럼 모든 인자는 레퍼런스로 받아야 성능이 좋을까?" 라는 생각이 문뜩들었습니다. 매우 큰 객체들은 (Struct, Class 변수) 레퍼런스로 받는게 당연히 빠를 것이나 그럼 int, double 같은 기본 값 타입들도 Call by Value가 아닌 Call by reference 로 받으면 빠르겠구나! 라고 대충 추정해보았습니다. 일단 레퍼런스로 받으면 빠르다라고 배웠으니깐요.. 그런데 찾아보니깐 아니더라구요.. 이에 관련하여 좋은 글을 작성해주신 분이 있어서 관련 링크를 첨부합니다. http..

Article Thumbnail
[C++] 다항식 클래스 100% 구현 완성!

프로그래밍/C++ 2022. 10. 6. 03:09

단일 연결 리스트 구조를 이용해서 무려 "다항식" 을 저장할 수 있는 Class를 구현했습니다! 과제라서 어쩔 수 없이 꾸역 꾸역 하긴 했는데 온갖 버그와 싸운 끝에 일단 구현 완성하긴 했네요. (사실 만들고 나니 왜 만든건지 잘 모르겠습니다. 울프람 알파 쓰면 안되나?) C/C++ 로 프로그래밍 하면서 느낀건데 얘내들은 뭔가 완성해도 "와 됐다!" 가 아니라 "어 됐네? 근데 왜 됐지?" 라는 말이 먼저 나옵니다 ㅋㅋ 특히 메모리 참조 오류를 너무 많이 쳐맞았더니 거의 사용한적 없는 Visual Studio 의 디버깅 툴이 참 고마워지더라구요. Rust 좋아하는 분들이 C/C++ 도 Rust가 대체할 것이다 이렇게 강하게 말하는 경우가 있습니다. 좀 비약이 강한 말이긴 하지만 솔직히 C는 몰라도 C++..

Article Thumbnail
[C++] 다항식 클래스 구현 50%

프로그래밍/C++ 2022. 10. 3. 02:55

과제로 연결리스트를 구현에서 다항식을 저장해주는 클래스를 만들고 있는데 요새 방구석에 앉아서 컴퓨터로 코딩만 했더니 진짜 헛구역질이 나오네요;; C나 C++이나 진짜 짜증나는게 한 두가지가 아닙니다.. C는 문자열 없어서 동적할당으로 똥꼬쇼 해야하고 C++은 객체 정의에 만들어야 할 게 도대체 몇개인지.. 옛날엔 분명 저 Visual Studio 폰트나 글자가 나름 마음에 들었던 거 같은데 이제는 VSCode 기본 폰트에 비해 깨랑깨랑(?) 해서 잘 보이지도 않네요 온갖 예민함과 짜증, 피로가 몰려옵니다 도대체 제가 뭐하는건지도 요새는 잘 모르겠습니다 솔직히 프로그래밍 하는건 즐거운데 몸이 못따라가는 기분입니다. 그도 그럴것이 하루에 7~8시간씩 컴퓨터만 만지고 있었으니깐... 좀 쉬었다 와야겠습니다. ..

Article Thumbnail
[C/C++] 선언(Declaration)과 정의(Definition)의 차이

프로그래밍/C++ 2022. 6. 21. 01:08

* 본 글은 학부생의 눈높이에 작성되었습니다 int a; int a = 10; 오류C2086'int a': 재정의 위 코드를 Visual Studio 에서 실행해보면 int a가 재정의(redefinition) 됐다는 오류 메세지가 출력되면서 컴파일이 되지 않습니다. 이런 오류 메세지는 컴파일러마다 다른데 재정의가 아니라 재선언(redeclaration) 이라는 오류 메세지가 출력되기도 합니다. 과연 정의와 선언의 차이는 무엇일까요? 정의와 선언은 다양한 프로그래밍 자료에서 혼동되어 사용되는 단어긴 하지만 엄밀히 따지면 이 둘은 다른것 입니다. 오늘은 이에 대해 알아보겠습니다. 선언(Declaration) vs 정의(Definition) 모든 정의는 선언을 포함하고 있지만 모든 선언은 정의가 아니다. 즉..

Article Thumbnail
[C++] Natural Sort 사용하기

프로그래밍/C++ 2022. 6. 14. 01:30

숫자, 이름이 여러 섞여 있는 내용의 문자열에 대해 윈도우 탐색기와 같은 정렬을 기대하려면 Natural Sort 라는 정렬을 시행해야 합니다. Natural Sort 란 쉽게 말해서 인간이 하는 방식으로 영문자 숫자를 정렬하는 방식을 이야기 합니다. 파이썬에선 natsort 라는 라이브러리가 있어서 그냥 pip install 로 설치하고 사용하면 끝이였는데 C++에서는 당연하게도 직접 구현해야 합니다. 제목을 보시면 알겠지만 Natural Sort 구현하기가 아니라 '사용하기' 입니다. 깃허브에 이미 친절하게 구현을 해둔 분이 있어서 이걸 사용하시면 됩니다. https://github.com/scopeInfinity/NaturalSort GitHub - scopeInfinity/NaturalSort: ..

Article Thumbnail