如何在 C++ 中的字符串数组中搜索字符串
how to search for a string in a string array in c++
说我有以下内容:
string myArray[] = { "adam", "aaron", "brad", "brandon" };
cout << "Please type a name: ";
我希望它,所以当用户键入"bra"并按回车键时,程序返回
brad
brandon
如果用户键入"a",程序将返回
adam
aaron
如果用户键入"adam",程序将返回
adam
我已经尝试过strstr,mystring.compare(str),mystring.compare(x,n,str) - 我找不到任何有效的方法。
处理此操作的最佳方法是什么?
这是 lambda 和 std::copy_if
的好时机。假设您要查找的字符串名为 to_find
:
std::copy_if(std::begin(myArray), std::end(myArray),
std::ostream_iterator<std::string>(std::cout, "n"),
[&](const std::string& s){
return s.find(to_find) == 0;
});
具体来说,测试某个字符串a
是否包含另一个字符串的方法b
,我们可以这样做:
a.find(b) == 0
std::string::find
返回找到b
的索引,如果未找到,则返回npos
。我们想要0
,因为你只需要前缀。然后我们将其包装在 lambda 中并将其传递到 copy_if
中,这将复制传递谓词的每个元素并将其写入我们提供的输出迭代器 - 在本例中是一个写入 std::cout
并使用 n'
作为分量计的ostream_iterator<std::string>
。
在没有 C+11 的情况下写出相同的内容,如下所示:
const size_t size = sizeof(myArray) / sizeof(*myArray);
for (size_t i = 0; i < size; ++i) {
if (myArray[i].find(to_find) == 0) {
std::cout << myArray[i] << std::endl;
}
}
根据你的名字列表有多大,扫描整个事情很快就会变得非常慢。您可能需要考虑实现自己的前缀树(又名trie)。
相关文章:
- 将C#字符串数组传递给C++
- 如何为 C 型字符串数组编写 getter 和 setter?
- 有没有办法使用 strcpy 将字符串数组复制到另一个字符串或其他数组中?
- 尝试将 c 字符串数组与分隔符连接起来
- 将字符串数组传递给接受常量字符**的函数
- 返回 C++ 中的字符串数组
- 如何从COM模块中的函数返回字符串数组?
- 无法将字符串数组声明为类成员而不是字符 (C++)
- 删除字符串数组
- 如何将字符串数组返回到 java JNI
- 将字符串数组作为函数参数传递
- C++将字符串数组的元素存储到变量中
- 循环访问还包含未使用元素的字符串数组
- 字符串数组上的 sizeof 运算符以 C++ 为单位给出不同的输出
- 乘以字符串/数组和全局数组
- 递归二进制搜索与字符串数组
- 如何初始化一个标准::字符串数组?
- 无法在声明时使用初始值设定项列表初始化常量字符*/字符串数组的向量
- C++字符串数组的动态向量
- 给定一个等长字符串数组