我正在为用户名数据库实现字符串匹配算法。我的方法采用现有的用户名数据库和该人想要的新用户名,并检查用户名是否已被占用。如果被采用,该方法应该返回用户名以及数据库中未采用的数字。
示例:
"Justin","Justin1", "Justin2", "Justin3"
输入
"Justin"
返回
"Justin4"
,因为 Justin 和 Justin 的号码 1 到 3 已被占用。
我已经用Java编写了这段代码,现在我正在用C++编写它来练习。不过我有一些问题:
如何比较两个字符串?我尝试过
strcmp
和其他一些方法,但总是收到错误消息:无法将参数 2 的 std::string
转换为 const char*
。
如何连接
int
和 string
?在 Java 中,就像使用 + 运算符一样简单。
在我的
main
函数中,它表示没有 Username::NewMember(std::string, std::string)
的匹配函数调用。为什么它不能识别 main 中的 newMember?
#include<iostream>
#include<string>
using namespace std;
class Username {
public:
string newMember(string existingNames, string newName){
bool found = false;
bool match = false;
string otherName = NULL;
for(int i = 0; i < sizeof(existingNames);i++){
if(strcmp(existingNames[i], newName) == 0){
found = true;
break;
}
}
if(found){
for(int x = 1; ; x++){
match = false;
for(int i = 0; i < sizeof(existingNames);i++){
if(strcmp(existingNames[i],(newName + x)) == 0){
match = true;
break;
}
}
if(!match){
otherName = newName + x;
break;
}
}
return otherName;
}
else return newName;
}
int main(){
string *userNames = new string[4];
userNames[0] = "Justin";
userNames[1] = "Justin1";
userNames[2] = "Justin2";
userNames[3] = "Justin3";
cout << newMember(userNames, "Justin") << endl;
delete[] userNames;
return 0;
}
}
好的,您的代码中有一些错误:
string
,只需使用operator==
:string == string2
如果您想在 C++ 中将
int
附加到 string
,您可以使用 streams
:
#include <sstream>
std::ostringstream oss;
oss << "Justin" << 4;
std::cout << oss.str();
您正在将
string*
传递给函数 newMember
但您的原型与该函数不匹配:
string *userNames = new string[4];
newMember(userNames, "Justin"); // Call
string newMember(string existingNames, string newName); // Protype
我认为应该是:
string newMember(string* existingNames, string newName);
不?在示例中,您的
main
函数位于您的类 Username
中。在 C/C++ 中这是不正确的。与 Java 不同,main
函数位于全局范围内。最后你应该使用const-reference参数,因为你不需要修改它们的内容,你需要复制它们:
string newMember(string* existingNames, const string& newName);
// ^^^^^ ^
您确定需要在主函数中动态分配一些东西吗?