코딩뚠뚠

[개념정리] C++ string 정리 -2 본문

알고리즘 문제풀이/개념정리

[개념정리] C++ string 정리 -2

로디네로 2021. 3. 4. 14:00
반응형

앞선 포스팅에서 string library 의 초기화 삽입 탐색 추가 등을 알아보았다.

 

dbstndi6316.tistory.com/216

 

[개념정리] C++ string 정리 -1

String Library 란 문자열을 나타내기 위한 클래스 이다. 대체로 코딩테스트에 문자열 input을 받아 처리하는 문제가 나오면 처리가 쉬운 파이썬으로 풀기를 권장하지만 나머지 부분을 전부 c++ 로 준

dbstndi6316.tistory.com

이번 포스팅은 2편으로 string 의 반복자, 제거, c스타일로 변경 등을 알아보고자 한다.

 

어쩌면 코딩테스트에서 더 많이 쓰일 수 있는 개념들이다.

 


 

String 비우기

#include <iostream>
#include <string>
using namespace std;
int main(){
    string str1 = "abc";
    //str1이 비어있지 않다면
    if(!str.empty()){
    	//str1을 비운다.
    	str1.clear();
    }
    return 0;
}

 


 

String 추출하기

#include <iostream>
#include <string>
using namespace std;
int main(){
    string str1 = "nice to meet you";
    string str2;
    str2 = str1.substr(5,2); // 5번 인덱스부터 2글자만 읽는다. "to"
    str2 = str1.substr(5); // 5번 인덱스부터 끝까지 읽는다. "to meet you"
    str2 = str1.substr(str1.find("to")); //to가 있는 인덱스부터 끝까지 읽는다. "to meet you"
    return 0;
}

 


 

String 반복자 이용

#include <iostream>
#include <string>
using namespace std;
string str = "nice to meet you";
int main(){
    str.begin(); // 시작 인덱스 = 0
    str.end(); //끝 인덱스+1 = 16 이는 즉 str.size() 와 같다고 볼수있다.
    string::iterator it; //반복자 선언
    for(it = str.begin(); it<str.end(); it++){
    	cout << *it;
    }
    cout << endl;
    return 0;
}

 


 

특정 문자열 제거

#include <iostream>
#include <string>
using namespace std;
int main(){
    string str1, str2, str3;
    str1.assign("123456");
    str1.erase(0,4); // 0~4까지 제거하니 "6" 만 남을것
    str1.earse(); //전체제거
    
    str2.assign("123456");
    str2.erase(2); //인덱스 2 이후로 다 제거후 남은것은 "12"
    return 0;
}
//인덱스를 받아 동작하는 것만 기억해두자.

 


 

특정 문자열 변경

#include <iostream>
#include <string>
using namespace std;
int main(){
    string str1("nice to meet you");
    string str2 = str1;
    
    str1.replace(str1.find("nice"),4,"NICE"); //nice의 시작인덱스에서 4의 길이만큼, NICE로 변환된다.
    //결과는 "NICE to meet you" 가 될것
    
    str2.replace(str2.begin()+5, str2.begin()+7, "toto"); //시작점부터 끝나는지점까지가 toto로바뀐다.
    //결과는 "nice toto meet you"
    
    return 0;
}

 


C스타일의 문자열로 변환 : c_str

처음들으면 당황스러운 얘기지만 python이 아닌.. 문자열처리가 번거로운 C에선 거의 필수적인 문법이다 ㅠ

 

우선 C에서 string 과 std::string 은 다르다. 밑의 블로그에서 잘 정리해 두어 링크를 가져와 봤다.

jhnyang.tistory.com/99?category=818707

 

[C/C++]cstring vs string.h vs string 스트링클래스 차이(C-strings vs std::string)

[C언어, C++언어, JAVA언어 라이브러리 및 함수 메서드 링크 ] [C/C++] string은 문자열을 담는 클래스잖아요? 하지만 헤더를 '#include '이나 '#include '로 놓고 문자열을 출력해보면 빨간 줄!! 불가능하다

jhnyang.tistory.com

C에서 string 은 문자열 저장 방식이 char* 이고

C++에서는 문자열을 클래스형태로 저장한다.

 

두 스타일을 혼합해서 입출력을 받으며 자유롭게 사용하려면 필수적인 c_str..

#include <iostream>
#include <string>
#include <string.h>
using namespace std;
int main(){
    string str1 = "str";
    char * array = new char[str1.length()+1]; //동적할당
    strcpy ( array, str1.c_str()); //str1을 c스타일로 변경하여 array에 복사한다.
    //strcpy(array,str1) 로 하면 안된다. array는 c스타일이고 str1은 string 방식이기 때문이다.
    return 0;
}

 

이의 쓰임에 대한 예시는 아래의 문제풀이에서 확인할 수 있다.

dbstndi6316.tistory.com/214

 

[알고리즘 문제풀이] 기타 코딩테스트 1-1

문제 : A 게임에는 많은 단독 스킬과 연계 스킬이 존재하며 사용자들은 스킬을 다양하게 조합하여 사용할 수 있다. 여기서 단독 스킬이란 다른 스킬에 영향을 받지 않고 단독적으로 사용

dbstndi6316.tistory.com

 

반응형

'알고리즘 문제풀이 > 개념정리' 카테고리의 다른 글

[개념정리] getline의 사용  (0) 2021.03.04
[개념정리] strtok  (0) 2021.03.04
[개념정리] C++ string 정리 -1  (0) 2021.03.04
[개념정리] Two pointer algorithm  (0) 2020.12.27
[개념정리] set container  (0) 2020.12.27