如何在c++中做python风格的字符串切片[duplicate]

62lalag4  于 2023-03-10  发布在  Python
关注(0)|答案(3)|浏览(137)

此问题在此处已有答案

C++ equivalent of Python String Slice?(7个答案)
四年前关闭了。
有没有可能实现一个方法,通过它我可以做切片在C++使用:操作符。
例如,我定义了一个C样式字符串,如下所示:

char my_name[10] {"InAFlash"};

我可以实现一个函数或重写任何内部方法来完成以下操作吗:

cout << my_name[1:5] << endl;

输出:nAFl
更新1:我尝试了如下字符串类型

#include <iostream>
#include <string>
using namespace std;
int main()
{
    string my_name;
    my_name = "Hello";
    // strcpy(my_name[2,5],"PAD");
    // my_name[2]='p';
    cout << my_name[2:4];
    return 0;
}

但是,出现以下错误

helloWorld.cpp: In function 'int main()':
helloWorld.cpp:10:22: error: expected ']' before ':' token
     cout << my_name[2:4];
                      ^
helloWorld.cpp:10:22: error: expected ';' before ':' token
5sxhfpxr

5sxhfpxr1#

如果您坚持使用C样式数组,std::string_view (C++17)可能是一种操作char[]而无需复制内存的好方法:

#include <iostream>
#include <string_view>

int main()
{
    char my_name[10] {"InAFlash"};
    std::string_view peak(my_name+1, 4);
    std::cout << peak << '\n'; // prints "nAFl"
}

演示:http://coliru.stacked-crooked.com/a/fa3dbaf385fd53c5
对于std::string,需要一个副本:

#include <iostream>
#include <string>

int main()
{
    char my_name[10] {"InAFlash"};
    std::string peak(my_name+1, 4);
    std::cout << peak << '\n'; // prints "nAFl"
}

演示:http://coliru.stacked-crooked.com/a/a16112ac3ffcd8de

1cosmwyk

1cosmwyk2#

如果你想要一个字符串的副本,那么可以使用迭代器或substr

std::string my_name("InAFlash");
std::string slice = my_name.substr(1, 4); // Note this is start index, count

如果你想在不创建新字符串的情况下对它进行切片,那么std::string_view(C++17)是可行的方法:

std::string_view slice(&my_name[0], 4);
sh7euo9m

sh7euo9m3#

如果使用std::string(C++方式),则可以

std::string b = a.substr(1, 4);

相关问题