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