在Java中
public int compareTo2(String that) {
String sig1 = this.sort();
String sig2 = that.sort();
return sig1.compareTo(sig2);
}
在C ++中
int compareTo2 (string that) {
string sig1 = this.sort();
string sig2 = that.sort();
return strcmp(sig1,sig2);
}
第一个是Java程序。我把它翻译成C ++程序。我写得对吗?谢谢。
答案 0 :(得分:2)
不 - 至少可能不是。首先,std::string
没有sort
作为成员函数,因此您可能会使用std::sort
。其次,您无法将std::string
传递给strcmp
。您可以使用c_str
成员函数,也可以直接使用普通运算符比较字符串(尽管这只会进行双向比较,而不是strcmp
的三向结果)。第三,你的代码似乎依赖于继承(或以其他方式扩展)标准字符串类,这很少是一个好主意。
bool compareTo2(std::string a, std::string b) {
std::sort(a.begin(), a.end());
std::sort(b.begin(), b.end());
return a < b;
}
编辑:请注意,这需要稍微不寻常的一步,即按值传递字符串。我们需要原始字符串的副本,以便我们可以对其进行排序而无需修改原始字符串,因此我只是通过值传递来获取副本,然后将我们收到的副本作为参数进行排序。
答案 1 :(得分:1)
this
是指针,因此必须使用this->item_I_want
取消引用。this
在C ++类中通常是可选的;在方法中,编译器知道你对item_I_want
的意思。sort()
方法。strcmp()
需要C字符串(char*
);您可以使用strcmp(sig1.c_str(),sig2.c_str())
。sig1 == sig2
,它返回一个布尔值。答案 2 :(得分:1)
我想你想确定两个按字母顺序排列各个字符的字符串是否相等。
你的任何一个功能都不会起作用,因为你正在做一些奇怪的事情。
java.lang.String
没有sort()
。您必须将字符串转换为char[]
,然后对该数组进行排序,然后将其转回String
。std::string
没有sort()
。您必须使用std::sort()
std::string
可以与==
this.sort()
...什么是this
?答案 3 :(得分:1)
strcmp()
不带字符串;你需要使用
strcmp(sig1.c_str(), sig2.c_str());
为了对字符串进行排序,您需要#include <algorithm>
,然后您可以调用
std::sort(sig1.begin(), sig1.end());
对字符串进行排序。
我还建议您使用strncmp()
方法并给出最大长度。它比strcmp()
安全得多。
答案 4 :(得分:1)
对于与给出的东西模糊相似的东西:
#include <string>
using std::string;
int compareTo2(string s1, string s2) {
string s3, s4;
std::copy(s1.begin(), s1.end(), std::back_inserter<std::string>(s3));
std::copy(s2.begin(), s2.end(), std::back_inserter<std::string>(s4));
std::sort(s3.begin(), s3.end());
std::sort(s4.begin(), s4.end());
return s3.compare(s4);
}
int main() {
compareTo2(std::string("abc"), std::string("cba"));
return 0;
}
答案 5 :(得分:0)
假设您使用string
时谈到std::string
:
std::string
未提供名为sort
的成员。你应该用std::sort
:
std::sort(sig2.begin(), sig2.end());
strcmp
被认为与const char*
一起使用,所以你必须写:
return strcmp(sig1.c_str(), sig2.c_str());
最后,this
必须取消引用:
std::string sig1 = this->sort();
答案 6 :(得分:0)
如果你想尽可能忠于Java语义,也许你应该将你的方法实现为:
int compareTo2 (const string& that) const
{
string sig1 = this.sort();
string sig2 = that.sort();
return strcmp(sig1.c_str(), sig2.c_str());
}
无论如何,在使用STL算法时,您必须在排序算法上实现“is-less-than”语义:
bool operator()(const string& s1, const string& s2) const
{
return s1 < s2;
}
答案 7 :(得分:0)
strcmp
不是你想要的。
string
已有一种方法可以做到这一点:
sig1.compare(sig2)