본문 바로가기

프로그래밍 언어/c c++8

[c c++] 문자열을 특정 문자 기준으로 자르기1 strtok char str[10]; str = "hello i am" char *p = strtok(str, " ") //공백을 기준으로 자른다. 근데 한번만 잘라준다. strtok의 작동방식 문자열을 보고 '특정 문자'가 나오면 특정문자를 '\0'으로 바꿔준다. 그리고 p는 str부터 \0까지의 문자열을 저장 이게 한번만 반복되기 때문에 여러번 하려면 #include char str[10]; 문자열 저장 char *str[10]; 문자열 리스트 저장 str = "hello i am" char *p = strtok(str, " ") while(ptr != null) //마지막 문자열까지 { strcpy(str[i++], p); //문자열 복사 p = strtok(null, " "); } 이렇게 된다. 근데 c++의.. 2020. 4. 11.
[c] 문자열 입력 선언방법 char str[LENGTH]; char *c; 마지막에 null문자(\0)가 저장되니 필요한 길이 +1 해서 저장하자. 1. scanf("%s", s); 문제: 공백문자 못읽음 => scanf("%[^\n]s", s); 를 사용하면 공백을 포함한 문자열 받는게 가능하다. - 참고로 scanf는 저렇게 선언된 포인터형 문자열은 못읽는다... 어떻게 해야 하나! malloc해줘야 한다. 문자열 크기만큼! #include #include int main() { //가능 char *s1 = malloc(sizeof(char) * 10); scanf("%s", s1); free(s1); //에러 char *s2; scanf("%s", s2); return 0; } 2. gets(s); 개행문자('\n'.. 2020. 4. 11.
[c++] 문자열 입력받기 문자열 선언 string s char c[LENGTH] 1. cin>>s scanf()와 유사하다. #include using namespace std; int main(void){ string s; cin>>s; } 문제점: 공백이 있으면 잘라버림, 개행 못읽음 ex) hello i am a student를 입력하면 hello만 나온다. 2. getline(cin, s) - getline(istream& is, string& str) - 헤더는 #include #include #include string s; getline(cin, s); - string을 받으므로 char*형은 받지 못한다. - getline은 문자열 자르기에도 사용된다. 문제점: 엔터(개행문자)까지 읽어버려서 버퍼에 엔터가 들어감... 2020. 4. 11.
[c++] STL map container 사용 특징 1. pair형태로 저장 map m; ex) map m; 2. 노드 기반의 균형이진트리구조, logN의 검색속도 보장 3. key는 고유하다. 중복 불가능 4. key값을 기준으로! 자동 정렬된다. default 는 오름차순 cf) unordered_map은 정렬되지 않은 map으로 hash table기반이고 map은 레드블랙트리 기반이다. RB Tree(레드블랙트리)는 BST에 self-balancing 기능을 추가한 것으로 O(logN)을 보장하며 밸런싱된다. 참고: gracefulprograming.tistory.com/3 [C++] map vs hash_map(unordered_map) 개요 hash_map은 비표준 Container인데 반해(stdext namespace에 포함) unord.. 2020. 3. 11.