C++中algorithm库find()查找字符串字符失效问题求助
问题分析与解决
你的代码无法运行的核心原因是类型不匹配:
vector<string>中存储的是std::string类型的对象s[0]返回的是char&类型(单个字符的引用)std::find会严格比较两个元素的类型,即使字符内容相同,char和string也不属于同一类型,因此无法匹配成功。
而用字符串字面量"h"能运行,是因为"h"会被隐式转换为std::string,和容器内元素类型一致。
至于你尝试的*s[0]报错,是因为s[0]本身是char类型,不是指针,没有可解引用的内存地址,所以编译器提示invalid type argument of unary '*'。
解决方法
方法1:将char转换为string
利用std::string的构造函数,把单个字符转换成长度为1的字符串:
#include <iostream> #include <algorithm> #include <vector> using namespace std; int main() { string s = "hello"; vector<string> v = {"h", "e", "l", "o"}; // 用string(1, char)构造单个字符的字符串 if(find(v.begin(), v.end(), string(1, s[0])) != v.end()) { cout << "found"; } return 0; }
也可以用C++11及以上支持的列表初始化简化:string{s[0]}。
方法2:修改vector的元素类型为char
如果业务场景允许,直接把容器改成存储char类型,这样类型完全匹配,无需转换:
#include <iostream> #include <algorithm> #include <vector> using namespace std; int main() { string s = "hello"; vector<char> v = {'h', 'e', 'l', 'o'}; if(find(v.begin(), v.end(), s[0]) != v.end()) { cout << "found"; } return 0; }
内容的提问来源于stack exchange,提问作者Ajaykrishnan R
相关产品推荐
相关产品推荐

