use*_*705 17 c++ arrays string
#include <iostream>
#include <string>
using namespace std;
bool in_array(string value, string *array)
{
int size = (*array).size();
for (int i = 0; i < size; i++)
{
if (value == array[i])
{
return true;
}
}
return false;
}
int main() {
string tab[2] = {"sdasd", "sdsdasd"};
string n;
cin >> n;
if (in_array(n, tab)) {
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我想检查C++,如果n字符串在tab数组中,但代码返回错误.我做错了什么?也许我应该使用向量?
mas*_*oud 26
int size = (*array).size();
Run Code Online (Sandbox Code Playgroud)
它不会告诉你它的大小array,它告诉你该数组中第一个字符串的长度,你应该将数组的长度分别传递给该函数.该函数应如下所示:
bool in_array(string value, string *array, int length)
Run Code Online (Sandbox Code Playgroud)
但更好的选择是使用std::vector和std::find:
bool in_array(const std::string &value, const std::vector<string> &array)
{
return std::find(array.begin(), array.end(), value) != array.end();
}
Run Code Online (Sandbox Code Playgroud)
然后,你可以使用它像:
int main() {
std::vector<std::string> tab {"sdasd", "sdsdasd"};
if (in_array(n, tab)) {
...
}
}
Run Code Online (Sandbox Code Playgroud)
将数组作为参数传递给只接受指针的函数时,您无法查询函数中数组的大小(因为它已转换为指向第一个元素的"愚蠢"指针,仅此而已).您通常会在签名或"结束"迭代器中添加"count"参数.
你基本上想要实现的是什么std::find.它需要两个迭代器(序列的开始和结束)和要找到的元素.只需使用此功能.
std::find(std::begin(tab), std::end(tab), n);
Run Code Online (Sandbox Code Playgroud)
如果找到它将返回一个迭代器,否则返回结束迭代器.检查与end迭代器的相等性将告诉您是否在数组中找到了该元素.
如果你不喜欢std算法的"迭代器接口",你可以std::find通过使用模板函数来实现类似PHP的签名:
template<class Element, class Container>
bool in_array(const Element & element, const Container & container)
{
return std::find(std::begin(container), std::end(container), element)
!= std::end(container);
}
Run Code Online (Sandbox Code Playgroud)
请注意:这个答案假设是C++ 11.如果使用较旧的编译器,它可能不起作用,或者仅在添加-std=c++11到编译器标志时才起作用.