如何检查字符串是否在字符串数组中 #包括 #包括 使用名称空间std; bool in_数组(字符串值,字符串*数组) { int size=(*数组).size(); 对于(int i=0;i>n; if(在_数组(n,tab)中){ } 返回0; } 我想检查C++是否强< n>强>字符串在 tab >强>数组中,但是代码返回错误。 我做错了什么?也许我应该用向量 #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; }

如何检查字符串是否在字符串数组中 #包括 #包括 使用名称空间std; bool in_数组(字符串值,字符串*数组) { int size=(*数组).size(); 对于(int i=0;i>n; if(在_数组(n,tab)中){ } 返回0; } 我想检查C++是否强< n>强>字符串在 tab >强>数组中,但是代码返回错误。 我做错了什么?也许我应该用向量 #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; },c++,arrays,string,C++,Arrays,String,它不会告诉您数组的大小,而是告诉您该数组中第一个字符串的长度,您应该将数组的长度分别传递给函数。该函数应该如下所示: int size = (*array).size(); 但更好的选择是使用std::vector和std::find: bool in_array(string value, string *array, int length) bool in_数组(常量std::字符串和值,常量std::向量和数组) { 返回std::find(array.begin(),array.e

它不会告诉您
数组的大小,而是告诉您该数组中第一个字符串的长度,您应该将数组的长度分别传递给函数。该函数应该如下所示:

int size = (*array).size();

但更好的选择是使用
std::vector
std::find

bool in_array(string value, string *array, int length)
bool in_数组(常量std::字符串和值,常量std::向量和数组)
{
返回std::find(array.begin(),array.end(),value)!=array.end();
}
然后,你可以像这样使用它:

bool in_array(const std::string &value, const std::vector<std::string> &array)
{
    return std::find(array.begin(), array.end(), value) != array.end();
}
intmain(){
std::向量选项卡{“sdasd”,“sdasd”};
if(在_数组(n,tab)中){
...
}
}

将数组作为参数传递给只接受指针的函数时,您无法在函数中查询数组的大小(因为它被转换为指向第一个元素的“愚蠢”指针,仅此而已)。您通常会将“count”参数添加到签名或“end”迭代器

您试图实现的基本上是
std::find
。它需要两个迭代器(序列的开始和结束)和要查找的元素。只需使用这个函数

int main() {
    std::vector<std::string> tab {"sdasd", "sdsdasd"};
    
    if (in_array(n, tab)) {
        ...
    }
}
如果找到元素,将向元素返回迭代器,否则返回结束迭代器。使用结束迭代器检查相等性将告诉您是否在数组中找到了元素

如果您不喜欢std算法的“迭代器接口”,可以通过使用模板函数包装
std::find
,实现类似PHP的签名:

std::find(std::begin(tab), std::end(tab), n);
模板
布尔in_数组(常量元素和元素、常量容器和容器)
{
返回std::find(std::begin(容器)、std::end(容器)、元素)
!=标准::结束(容器);
}

请注意:此答案假定为C++11。如果使用较旧的编译器,它可能不起作用,或者只有在将
-std=c++11
添加到编译器标志时才起作用。

只需使用
std::find
。按原样,您假装数组中有五个字符串
array->size()
@H2CO3
(*array)。size()
实际上是
array[0]。size()
。看这张照片brackets@Smac89我建议你阅读一个关于指针的初学者C++指南。(不尝试教C++ C++,直到你不知道你在做什么)。(0)。siz()/<代码>与<代码>数组-> siz()/<代码> @ @ H2CO3感谢你的澄清,但不返回初学者C++ 1,用于推荐向量和使用查找,而不是重新创建。wheel@user3050705:是的,您需要
#包括
,并通过
--std=C++11
编译器开关(在clang和gcc中)启用C++11
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);
}