我最近从C
切换到OOP语言 - C++
和Python 3.4
我注意到Python
C++
可以击败str="hello world "
str.strip().split()
的相当多的东西
其中一个是调用功能的便利性。
所以我决定以某种方式使用STL实现在C ++中进行函数调用的python方式。
我开始使用'字符串'类。
在Python中,我可以这样做:
object.func1().func2().func3()
首先,剥离字符串末尾的尾部空格,然后将字符串分成两半的空格
现在 NEAT
并且我喜欢能够以这种方式调用函数,即class MYstring
{
string str;
public:
//constructor
MYstring(string str)
{ setter(str); }
//setter function
MYstring& setter( string str )
{ this->str=str;
return *this;
}
//getter_str function
string getter_str()
{ return str;
}
unsigned int getter_size()
{ return str.size();
}
//modifier function(s)
MYstring& split(char x='\0')
{ string temp="";
for(int i=0; i<str.size(); i++)
{ if(this->str[i-1] == x)
break;
temp += str[i];
}
this->str=temp;
return *this;
}
MYstring& strip()
{
for(int i=this->str.size() - 1; i>=0; i--)
{ if(this->str[i] == ' ')
this->str.erase(i);
else if(isalnum(this->str[i]))
break;
}
return *this;
}
};
等等
因为我完全不知道stl class&#39; string&#39;,我开始使用自己制作的课程&#39; MYstring&#39;
main()
为了测试类及其成员函数,我使用了以下int main()
{ //take a user-defined string-type input
string input;
cout<<"Enter a string: ";
getline(cin,input);
// create an object of class 'MYstring'
// and initialise it with the input given by the user
MYstring obj(input);
//take the character at which the string must be split
cout<<"\nEnter character to split the string at: ";
char x;
cin>>x;
//display original input
cout<<"\n\nThe user entered: "<<obj.getter_str();
cout<<"\nSize = "<<obj.getter_size();
obj.strip().split(x);// <--- python style function call
cout<<"\n\nAfter STRIP and SPLIT: "<<obj.getter_str();
cout<<"\nSize = "<<obj.getter_size();
return 0;
}
split
并且有效
所以,最后我的问题是:
如何为strip
创建和使用相同的C++ STL string class
和{{1}}函数?
是否可以在STL中使用我们自己创建的方法?
欢迎提出任何建议。
答案 0 :(得分:0)
您可以扩展类std :: string并使用扩展类。因此,您的类将具有STL字符串的所有功能以及其他方法。
class mystring: public std::string {
...
};
答案 1 :(得分:0)
根据经验以及评论中明确标记的链接所涵盖的主题,我不会继承STL类,而是创建自己的类,因为你已经完成了。
但是,除了std :: string复制构造函数之外,您还可以添加一个类型转换为std :: string的运算符重载,因此很容易将代码转换为对象和std: :使用带有std :: string的库时的字符串。