C++ string 총정리

Source


int main(){
    ios_base::sync_with_stdio(false); cin.tie(nullptr);

    /////////////////////////
    // C style
    /////////////////////////
    char k[6] = {'n', 'o', '\0', 'o', 'p', 'e'};
    std::cout << k << std::endl;
    std::cout << sizeof(k) << std::endl;
    std::cout << strlen(k) << std::endl;

    char a[] = "nocope";
    a[0] = 'd';
    std::cout << a << std::endl;
    std::cout << sizeof(a) << std::endl;
    std::cout << strlen(a) << std::endl;

    // Performance first!
    const char * b = "nocope";    // in the readonly domain => const must!
    // b[0] = 'd';  // error!
    std::cout << b << std::endl;
    std::cout << sizeof(b) << std::endl;    // sizeof pointer : 8 @ 64-bit system
    std::cout << strlen(b) << std::endl;

    /////////////////////////
    // C++ style
    /////////////////////////
    // General cases!
    /*/
    std::string c = "nocope";
    /*/
    std::string c("noc\0ope", 7);
    // /*/
    std::cout << c << std::endl;
    std::cout << sizeof(c) << std::endl;
    // std::cout << stdlen(c) << std::endl;    // error!
    std::cout << c.size() << std::endl;

    return 0;
}

Output

no
6
2
docope
7
6
nocope
8
8
6
nocope
32
6

std::string 동작 방식

  • 2023년 현재 일반적인 system에서 std::string의 기본 size는 32 byte
  • 만약 allocation 되는 character 수가 적어서 32 byte보다 작아지면, heap이 아닌 stack에 올라감
  • data()는 C++17부터는 nullptr return이 보장됨
  • string_view 라는 것도 있는데, ubuntu에서는 정의가 안된 것(?)으로 나옴;;

KMP 알고리즘, 기초, String Matching

String matching problem 은 O(n) 이다.

코딩테스트, 기초, Palindrome

코딩 테스트, 초급, Add Strings

https://coolwindjo.github.io/algoguru/2023/03/13/add-strings.html

코딩테스트, 중급, Group Anagrams

코딩테스트, 중급, Longest substring w/o Repeats