字符串匹配alg的c ++实现

时间:2013-08-18 08:08:04

标签: c++ string compare

我正在为用户名数据库实现字符串匹配算法。我的方法采用现有的用户名数据库和该用户想要的新用户名,并检查是否采用了用户名。如果采用该方法,则该方法应返回带有未在数据库中获取的数字的用户名。

示例:

“Justin”,“Justin1”,“Justin2”,“Justin3”

输入“Justin”

返回:“Justin4”,因为贾斯汀和贾斯汀的数字1到3已经被采取。

我已经用Java编写了这段代码,现在我用C ++编写实践。我有一些问题:

  1. 你如何比较两个字符串?我已经尝试过strcmp和其他一些但我总是收到错误消息:无法将std :: string转换为const char *作为参数2.

  2. 如何连接int和字符串?在java中,它就像使用+运算符一样简单。

  3. 在我的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;
    
    
        }
     }
    

1 个答案:

答案 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);
    //                                      ^^^^^       ^
    

您确定需要在主函数中动态分配的内容吗?