在C ++中部分搜索字符串数组

时间:2018-04-07 17:55:50

标签: c++ arrays string find

对于我在学校所做的作业,我们被要求创建一个包含姓名和电话号码的字符串数组。目标是搜索全名或部分名称并显示所有相关的电话号码,即搜索Palmer并提取其中包含姓氏Palmer的所有字符串。    我被困了,我可以得到编译的代码。我可以在没有数组的情况下使用string.find()方法,但是现在我使用的是数组,它甚至无法编译。

这是我的功能:

void nameSearch(string list[], const int size, string userIn)
{
    // Search for names and display them. 
    cout << "Here are the names that match your input: " << endl;

    int index = 0;

    while (index < size)
    {
        size_t pos = list[index].find(userIn); // Search for user input
        if (pos != std::string::npos) 
        {
            std::cout << list[index] << endl;
        }
        else
        {
            std::cout << " " << endl;
        }
        index++;
    }
    return;
}

它产生了这个错误:

  

错误LNK2019未解析的外部符号&#34; void __cdecl nameSearch(类std :: basic_string,类std :: allocator&gt; const * const,int,class std :: basic_string,class std :: allocator&gt;)& #34; (?nameSearch @@ YAXQBV?$ basic_string @ DU?$ char_traits @ D @ std @@ V?$ allocator @ D @ 2 @@ std @@ HV12 @@ Z)在函数_main ConsoleApplication11 C:\ Users \ xehon \中引用source \ repos \ ConsoleApplication11 \ ConsoleApplication11 \ ConsoleApplication11.obj 1

它说第一行有一个错误,但所有这一切都有评论。

我的问题是C ++没有办法搜索字符串数组,还是只是我做得不对劲?

编辑::新代码:

 // Pull up a phone number based on name entered

#include "stdafx.h"
#include<iostream>
#include <string>

const int Size = 10;

std::string nameSearch(const std::string[], int, std::string); // Function Prototype

int main()
{

    std::string input; // User Input

// List of pre programmed names and numbers
    std::string Str1 = "Hoshikawa Tanaka, 678-1223";
    std::string Str2 = "Joe Looney, 586-0097";
    std::string Str3 = "Geri Palmer, 223-8787";
    std::string Str4 = "Lynn Lopez, 887-1212";
    std::string Str5 = "Holly Gaddis";
    std::string Str6 = "Sam Wiggins";
    std::string Str7 = "Bob Kain";
    std::string Str8 = "Tim Haynes, 586-7676";
    std::string Str9 = "Warren Gaddis, 223-9037";
    std::string Str0 = "Ron Palmer, 486-2783";

    const std::string array[Size] = { Str1, Str2, Str3, Str4, Str5, Str6, Str7, Str8, Str9, Str0 };

    std::cout << "Enter the name you wish to search for: " << std::endl;
    std::cin >> input;

    nameSearch(array, Size, input);

    return 0;
}
std::string nameSearch(std::string list[], const int size, std::string userIn)
{
// Search for names and display them. 
    std::cout << "Here are the names that match your input: " << std::endl;

    int index = 0;

    while (index < size)
    {
        size_t pos = list[index].find(userIn); // Search for user input
        if (pos != std::string::npos)
        {
            std::cout << list[index] << std::endl;
        }
        else
        {
            std::cout << " " << std::endl;
        }
        index++;
    }
    return userIn;
}

仍然产生错误

2 个答案:

答案 0 :(得分:1)

前瞻性声明和实施

std::string nameSearch(const std::string[], int, std::string)
std::string nameSearch(std::string list[], const int size, std::string userIn)

不一样。使它们更相似

std::string nameSearch(const std::string list[], int size, std::string userIn)
std::string nameSearch(std::string list[], const int size, std::string userIn)

显示const移动到另一个变量。最终结果,提供的nameSearch函数与前向声明承诺的nameSearch函数不匹配。他们必须是一样的。 size按价值传递,副本通常没有多大意义const,所以请

std::string nameSearch(const std::string list[], int size, std::string userIn)
试一试。

旁注:你可以让自己的事情变得更容易。

    std::string Str1 = "Hoshikawa Tanaka, 678-1223";
    std::string Str2 = "Joe Looney, 586-0097";
    std::string Str3 = "Geri Palmer, 223-8787";
    ...

    const std::string array[Size] = { Str1, Str2, Str3, ... };

可以缩减为

    const std::string array[Size] = { "Hoshikawa Tanaka, 678-1223", 
                                      "Joe Looney, 586-0097", 
                                      "Geri Palmer, 223-8787",
                                      ... };

答案 1 :(得分:0)

您的函数原型与函数定义不同:

std::string nameSearch(const std::string[], int, std::string);

std::string nameSearch(std::string list[], const int size, std::string userIn)

Top-level const qualifiers不是函数签名的一部分,但其他人也是。您应该将您的函数声明为:

std::string nameSearch(std::string[], int, std::string);