C++ 关于C++;
对于此分配,我们不允许使用std::string 我有一个构造函数,它接受一个模仿DNA链的C字符串C++ 关于C++;,c++,operator-overloading,C++,Operator Overloading,对于此分配,我们不允许使用std::string 我有一个构造函数,它接受一个模仿DNA链的C字符串 DNAStrand::DNAStrand(const char* startingString) { length = strlen(startingString); bases = new char[length + 1] {'A','C','G','T',0}; } 然后,我尝试重载一个布尔运算符,该运算符将检查我创建的串与另一个串 bool DNAStrand::oper
DNAStrand::DNAStrand(const char* startingString) {
length = strlen(startingString);
bases = new char[length + 1] {'A','C','G','T',0};
}
然后,我尝试重载一个布尔运算符,该运算符将检查我创建的串与另一个串
bool DNAStrand::operator==(const DNAStrand& other) const {
if (length != other.length)
return false; //can't be the same if we don't have same # items
//Same size, walk through items looking for mismatch
for (int i = 0; i < length; i++) {
if (bases[i] != other.bases[i])
return false;
}
return true; //Must be identical
}
我很确定for循环存在一个问题,它应该迭代C字符串中的每个字符,但我不知道问题是什么。在我看来,要么是这样,要么是我原来的构造函数错了。当你创建一个
DNAStrand
对象时,你没有将startingString
存储在任何地方(你只保留它的长度)。更重要的是,您正在为所有对象设置相同的基础“ACGT”:
DNAStrand::DNAStrand(const char* startingString) {
length = strlen(startingString);
bases = new char[length + 1] {'A','C','G','T',0};
}
当您在循环中比较base
时,您正在比较左对象和右对象中的“ACGT”,并且始终返回true
解决它存储开始字符串:
DNAStrand::DNAStrand(const char* startingString) {
length = strlen(startingString);
bases = new char[length + 1] {startingString};
}
请对字符串使用std::string
而不是char*
/char[]
/new
,这样您就不会有任何此类问题。您是否忘了为起始字符串中的实际值设置基数?目前看来,无论您传递给构造函数的是什么,基础都将是{'A'、'C'、'G'、'T',0}@walnut,为了清楚起见,我们不允许在这个赋值中使用std::string来“了解制作类似字符串的对象所涉及的内容并进行[我们]自己的内存管理”@DanBoing好的,这是没有帮助的。请注意,在实践中,你不会编写这样的代码。因为“代码> > BASE/C++”,总是以相同的值初始化,因为这似乎不是故意的。你的代码不是有效的C++。无法从const char*
初始化char
数组。
DNAStrand::DNAStrand(const char* startingString) {
length = strlen(startingString);
bases = new char[length + 1] {startingString};
}