对于我在学校所做的作业,我们被要求创建一个包含姓名和电话号码的字符串数组。目标是搜索全名或部分名称并显示所有相关的电话号码,即搜索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;
}
仍然产生错误
答案 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);