如何在c ++

时间:2018-09-21 07:20:43

标签: python c++ object-slicing

是否有可能实现一种方法,通过该方法,我可以使用:运算符在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

3 个答案:

答案 0 :(得分:2)

如果您坚持使用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

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

如果要复制字符串,则可以使用迭代器或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);