c++ - 如何检查字符数组中是否存在字符串值?

标签 c++ arrays char

#include <iostream>

using namespace std;

int main()
{
    string str = "cab";
    string d = "";
    char s[] = {'a', 'b', 'c', 'd', 'e'};
    for(int i = 0; i < sizeof(s) / sizeof(s[0]); i++){
        for(int j = 0; j < str.length(); j++){
            if(str[j] == s[i]){
                d += s[i];
            }
        }
    }
    cout << d << endl;
    return 0;
}

我想检查字符串“cab”是否存在于字符数组中,就像在我的例子中一样,它应该存在,无论字符数组中元素的位置如何。

最佳答案

假设您的子字符串不会重复,您可以使用 unordered_set .所以你基本上遍历了你的 s[] 并且对于每个字符,你将检查集合是否包含该特定字符。

unordered_set 允许 O(1) 搜索,因此您的算法应该在 O(n) 内运行(n = s 的大小)。

当您在集合中找到一个也在数组中的字符时,您将其删除并继续遍历数组。如果在您完成遍历数组时集合为空,那么您就知道您的数组包含该子字符串。您还可以在每次从集合中删除一个字符时检查该集合是否为空,这应该会减少执行时间。

关于c++ - 如何检查字符数组中是否存在字符串值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21084560/

相关文章:

c - 无法打印从函数返回的 char* 是怎么回事?

c++ - lambda 的参数和返回值的类型转换规则是什么?

Java 2D 数组问题

arrays - 在go中删除或调整数组大小

python - 在 Python 中保存二维数组或列表的 CSV 文件的最佳方法?

c - 在函数中返回 char*

c++ - 如何从派生构造函数初始化列表初始化模板基类的成员?

c++ - 在文件描述和主页中使用注释

c++ - Opencv人脸检测速度较慢

c++ - 打印字符数组的地址