字符串匹配算法的C++实现

问题描述 投票:0回答:1

我正在为用户名数据库实现字符串匹配算法。我的方法采用现有的用户名数据库和该人想要的新用户名,并检查用户名是否已被占用。如果被采用,该方法应该返回用户名以及数据库中未采用的数字。

示例:

"Justin","Justin1", "Justin2", "Justin3"

输入

"Justin"

返回

"Justin4"
,因为 Justin 和 Justin 的号码 1 到 3 已被占用。

我已经用Java编写了这段代码,现在我正在用C++编写它来练习。不过我有一些问题:

  1. 如何比较两个字符串?我尝试过

    strcmp
    和其他一些方法,但总是收到错误消息:无法将参数 2 的
    std::string
    转换为
    const char*

  2. 如何连接

    int
    string
    ?在 Java 中,就像使用 + 运算符一样简单。

  3. 在我的

    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;
    
    
         }
      }
    
c++ string compare
1个回答
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参数,因为你不需要修改它们的内容,你需要复制它们:

    string newMember(string* existingNames, const string& newName);
    //                                      ^^^^^       ^
    

您确定需要在主函数中动态分配一些东西吗?

© www.soinside.com 2019 - 2024. All rights reserved.