是否有代码可以检查某个字符串是否在数组中? 例如,我有一个字符串“John”,然后我需要检查“John”是否已经在数组名称中[10]。
答案 0 :(得分:4)
std::find
正是如此:
auto i = std::find(std::begin(a), std::end(a), "John");
if (i != std::end(a)) … // item found!
但是,请注意,这会对元素进行线性传递。对于10个项目来说这不是问题,但是随着数量的增加它会很快变得低效。对于非常大的集合,使用std::unordered_set
而不是数组来获得(理论上)常量运行时。或者,如果您知道数组已排序,则可以使用std::binary_search
来获得对数运行时。
这是相同的代码,包含在一个便利函数中:
template <typename It, typename T>
bool contains(It begin, It end, T const& value) {
return std::find(begin, end, value) != end;
}
这是C阵列的便利重载:
template <typename T, typename U, std::size_t N>
bool contains(T (&arr)[N], U const& value) {
return std::find(arr, arr + N, value) != arr + N;
}
(将数组传递给函数的语法有点奇怪。)
答案 1 :(得分:-2)
如果你想过时:
function in_array(String my_array[], String findthis){
len=sizeof my_array;
for(int i=0;i<len;i++){
if(my_array[i]==findthis){
return true;
}
}
return false;
}
然后
in_array(array_of_strings, "john");
我草草地写了这个,我很累,但希望它有用。