C++ equivalent of Python String Slice?

前端 未结 6 1206
灰色年华
灰色年华 2021-01-01 13:30

In python I was able to slice part of a string; in other words just print the characters after a certain position. Is there an equivalent to this in C++?

Python Code

相关标签:
6条回答
  • 2021-01-01 13:56
    std::string text = "Apple Pear Orange";
    std::cout << std::string(text.begin() + 6, text.end()) << std::endl;  // No range checking at all.
    std::cout << text.substr(6) << std::endl; // Throws an exception if string isn't long enough.
    

    Note that unlike python, the first doesn't do range checking: Your input string needs to be long enough. Depending on your end-use for the slice there may be other alternatives as well (such as using an iterator range directly instead of making a copy like I do here).

    0 讨论(0)
  • 2021-01-01 13:57

    It looks like C++20 will have Ranges https://en.cppreference.com/w/cpp/ranges which are designed to provide, amongst other things, python-like slicing http://ericniebler.com/2014/12/07/a-slice-of-python-in-c/ So I'm waiting for it to land in my favorite compiler, and meanwhile use https://ericniebler.github.io/range-v3/

    0 讨论(0)
  • 2021-01-01 14:07

    Sounds like you want string::substr:

    std::string text = "Apple Pear Orange";
    std::cout << text.substr(6, std::string::npos) << std::endl; // "Pear Orange"
    

    Here string::npos is synonymous with "until the end of the string" (and is also default but I included it for clarity).

    0 讨论(0)
  • 2021-01-01 14:16

    In C++ the closest equivalent would probably be string::substr(). Example:

    std::string str = "Something";
    printf("%s", str.substr(4)); // -> "thing"
    printf("%s", str.substr(4,3)); // -> "thi"
    

    (first parameter is the initial position, the second is the length sliced). Second parameter defaults to end of string (string::npos).

    0 讨论(0)
  • 2021-01-01 14:17

    You can do something like this using the string class:

    std::string text = "Apple Pear Orange";
    size_t pos = text.find('Pear');
    
    0 讨论(0)
  • 2021-01-01 14:19

    Yes, it is the substr method:

    basic_string substr( size_type pos = 0,
                         size_type count = npos ) const;
        
    

    Returns a substring [pos, pos+count). If the requested substring extends past the end of the string, or if count == npos, the returned substring is [pos, size()).

    Example

    #include <iostream>
    #include <string>
    
    int main(void) {
        std::string text("Apple Pear Orange");
        std::cout << text.substr(6) << std::endl;
        return 0;
    }
    

    See it run

    0 讨论(0)
提交回复
热议问题