我正在为用户名数据库实现字符串匹配算法。我的方法采用现有的用户名数据库和该用户想要的新用户名,并检查是否采用了用户名。如果采用该方法,则该方法应返回带有未在数据库中获取的数字的用户名。
示例:
“Justin”,“Justin1”,“Justin2”,“Justin3”
输入“Justin”
返回:“Justin4”,因为贾斯汀和贾斯汀的数字1到3已经被采取。
我已经用Java编写了这段代码,现在我用C ++编写实践。我有一些问题:
你如何比较两个字符串?我已经尝试过strcmp和其他一些但我总是收到错误消息:无法将std :: string转换为const char *作为参数2.
如何连接int和字符串?在java中,它就像使用+运算符一样简单。
在我的main函数中,它表示没有Username :: NewMember(std :: string,std :: string)的匹配函数调用。为什么它不能识别主要的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;
}
}
答案 0 :(得分:1)
好的,您的代码中存在一些错误:
如果您想比较两个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 parameter,因为你不需要修改它们的内容,你需要复制它们:
string newMember(string* existingNames, const string& newName);
// ^^^^^ ^
您确定需要在主函数中动态分配的内容吗?