본문 바로가기

C++/공부 정리

string 클래스 find, length, substr

find 메서드

str.find(a, b)

b 인덱스부터 a 문자열이 어디 인덱스에 있는지 리턴함. 만일 찾지 못한다면 -1 리턴

#include <iostream>
#include <string>
using namespace std;

int main()
{
    string a = "asdsdasdsadaskfc";
    cout << a.find("kfc");
    return 0;
}

 

 

+ 연산의 경우에도 그냥 뒤에 이어 붙는다.

하지만 스트링을 더해주는 것이 아니라 그냥 문자열을 두개 이상 더한다면 오류가 난다.

ex) string a = "abc" + "dfe"; 

따라서 따로 더해주거나 스트링을 하나 중간에 추가한다.

ex)

string a = "abc";

string b = a + "dfe";

// 즉, string 클래스 + 문자열 -> 가능

// 그러나 문자열 + 문자열은 불가능 하다.

왜냐하면 문자열을 char*로 인식하기 때문 따라서 형 변환을 통해 string으로 바꿔주면 가능하다.

 

파싱을 하는 이유: 로그 데이터에서 원하는 데이터만 뽑아 그래프를 그리고 싶음

사람들의 이력, 로그로 원하는 데이터 가져오기 

ps보다는 현업에서 많이 사용됨.

 

find + substr로 파싱을 함.

substr(a, b)

a인덱스부터 b개를 뽑아내겠다.

#include <iostream>
#include <string>
using namespace std;
int main()
{
    string words = "AB[1342]qt";
        
    int a = words.find("[");
    cout << words.substr(a + 1, 4);
    
    return 0;
}

 

#include <iostream>
#include <string>
using namespace std;
int main()
{
    string words = "abcdefghijklmnop";
    
    
    // a index ~ b index까지 출력
    int a, b;
    cin >> a >> b;
    cout << words.substr(a, b - a + 1);
}

 

문자열과 스트링의 변환

#include <iostream>
#include <string>
#include <cstring>
using namespace std;

int main()
{
    // 문자열을 스트링 객체로
    char buf[10] = "kfc";
    string a;
    a = buf;
    
    // 스트링 객체를 문자열로
    a = "sky";
    strcpy(buf, a.c_str());
    cout << buf;
    return 0;
}

 

 

stoi ( 스트링을 숫자로)

to_string ( 숫자를 스트링으로)

 

팁: 파싱 문제는 웬만하면 하드 코딩한 후에 푸는 것이 좋다. 디버그가 다 끝나면 입력으로 바꿔주는 것이 좋음. 매우 까다롭기 때문

'C++ > 공부 정리' 카테고리의 다른 글

Vector로 그래프 관계 표현  (0) 2022.04.27
vector 이것 저것 사용, 그래프  (0) 2022.04.26
재귀, 배열 원상복귀,  (0) 2022.04.22
순열, 조합  (0) 2022.04.21
STL sort  (0) 2022.04.11