int findFirst(const string a[], int n, string target)
{
for (int i = 0; i < n; i++)
if (a[i] == target)
return i;
return -1;
}
如何在不使用方括号和使用以下函数头的情况下编写上述程序?
int findFirst(const string* a, int n, string target)
答案 0 :(得分:1)
您可以简单地替换功能标题; const string a[]
已经是指针参数,与const string* a
完全相同。
然后,您可以取消引用a + i
for (int i = 0; i < n; i++)
if (*(a + i) == target)
或增加a
以及i
for (int i = 0; i < n; i++, a++)
if (*a == target)
或者你只能使用指针
for (const string* p = a; p < a + n; p++)
if (*p == target)
答案 1 :(得分:0)
首先,如果你编写一个有指针作为输入参数的函数,最好在nullptr(或0)上检查这个指针:
int findFirst(const string * a, int n, string target)
{
if (a)
{
// do search
}
return -1;
}
其次,要搜索项目位置,您可以使用标准库中的算法:
#include <algorithm>
int findFirst(const std::string* a, int n, std::string target)
{
if (a)
{
int res = std::distance(a, std::find(a, a + n, target));
if (res < n)
{
return res;
}
}
return -1;
}
第三,最好通过const引用传递目标以排除不必要的复制构造函数调用。因此,我们可以得到以下最终解决方案:
#include <algorithm>
int findFirst(const std::string* a, int n, const std::string& target)
{
if (a)
{
int res = std::distance(a, std::find(a, a + n, target));
if (res < n)
{
return res;
}
}
return -1;
}