将java转换为c ++

时间:2011-02-25 21:36:31

标签: java c++

在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 ++程序。我写得对吗?谢谢。

8 个答案:

答案 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的意思。
  • C++ strings没有sort()方法。
  • strcmp()需要C字符串(char*);您可以使用strcmp(sig1.c_str(),sig2.c_str())
  • 进行调用
  • 在C ++中进行字符串比较的更好方法是sig1 == sig2,它返回一个布尔值。

答案 2 :(得分:1)

我想你想确定两个按字母顺序排列各个字符的字符串是否相等。

你的任何一个功能都不会起作用,因为你正在做一些奇怪的事情。

  1. java.lang.String没有sort()。您必须将字符串转换为char[],然后对该数组进行排序,然后将其转回String
  2. C ++中的
  3. std::string没有sort()。您必须使用std::sort()
  4. C ++中的
  5. std::string可以与==
  6. 进行比较
  7. 您在Java中调用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)