2011-02-25 40 views
0

在Java传递的Java和C++

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++程序。我写错了吗?谢谢。

+9

最好的办法知道:“我是不是正确的写”键入它,尝试编译它,尝试运行它;-) – ChrisJ 2011-02-25 21:40:54

+1

- “不” - 那很简单。下一步是什么? – sellibitze 2011-02-25 21:48:11

+0

@sellibitze,这是居高临下......并没有帮助 – 2011-02-25 21:53:05

回答

0

假设与string你说的std::string

std::string不提供名为sort成员。你应该做到这一点与std::sort

std::sort(sig2.begin(), sig2.end()); 

而且strcmp被认为与const char* s内使用,所以你必须写:

return strcmp(sig1.c_str(), sig2.c_str()); 

最后,this必须被解除引用:

std::string sig1 = this->sort(); 
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,它返回一个布尔值。
+0

:也许他想要strcmp行为,返回第一个不匹配的索引? – 2011-02-25 21:49:01

+0

@Polybos我不确定他的意图是什么。 – chrisaycock 2011-02-25 21:51:45

1

我想你想确定两个字符串是否具有按字母顺序排列的单个字符。

你的功能都不会工作,因为你正在做一些奇怪的事情。

  1. java.lang.String没有sort()。您必须将字符串转换为char[],然后对该数组进行排序,然后将其重新转换为String
  2. std::string in C++ does not have sort()。你必须要在C std::sort()
  3. std::string ++可以==
  4. 要调用Java中this.sort() ...什么是this进行比较?
1

strcmp()不带字符串;你需要使用

strcmp(sig1.c_str(), sig2.c_str()); 

为了你的字符串,你需要#include <algorithm>排序,那么你可以调用

std::sort(sig1.begin(), sig1.end()); 

到您的字符串进行排序。

我还建议您使用strncmp()方法并给出最大长度。它比strcmp()安全得多。

2

否 - 至少可能不是。首先,std::string不具有sort作为成员函数,因此您可能会使用std::sort。其次,你不能通过std::stringstrcmp。您可以使用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

对于依稀相似的东西是什么给定:

#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; 
} 
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; 
} 
0

像其他人所说的,strcmp不是你想要的。

string已经有了,做了方法:

sig1.compare(sig2)