我有一组字符串,我需要访问每个字符串并将字符串的第一个字母与char进行比较,如果它们相同则停止。我该怎么做?我试过
char* p;
for (std::set<string>::iterator iter=myset.begin(); iter!=myset.end();iter++)
{p = *iter;
if (p==characterForComparison) return 0;
}
,但这并没有通过编译器,它说
error C2440: '=' : cannot convert from 'std::basic_string<_Elem,_Traits,_Ax>' to 'char *'
我该如何解决这个问题?我需要的是相当简单的,所以我需要尽可能简单的解决方案,只需查看所有字符串,比较第一个字母,如果它们相同,则返回0;
答案 0 :(得分:4)
比较std::string
的第一个字符:
if (!(*iter).empty() &&
(*iter)[0] == characterForComparison)
{
}
要访问字符串中的第一个元素,字符串会提供operator[]
,front()
或使用begin
来获取对第一个元素的引用。请参阅std::string页。
答案 1 :(得分:2)
由于您的集合包含std::string
s,因此取消引用迭代器会为您提供string
,而不是第一个字符。改为使用运算符[]
:
p = (*iter)[0];
答案 2 :(得分:2)
*iter
是一个字符串,请尝试
char p;
//...
p = (*iter)[0]
答案 3 :(得分:2)
你有两个问题。首先,您尝试将std::string
对象分配给char*
。第二个是如果你想要第一个字符,那么p
应该被声明为一个字符,而不是一个指向字符的指针。
当然,实际上没有必要将角色存储在像p
这样的临时变量中,至少不是像你这样的简单案例。直接从字符串中使用它,如
if ((*iter)[0] == characterForComparison) { /* do something */ }
答案 4 :(得分:2)
如果你可以使用C ++ 11:
for(auto s : myset)
{
if(s[0] == characterForComparison)
{
return 0;
}
}
答案 5 :(得分:1)
C ++字符串不能转换为C风格的字符串。 *iter
为您提供了一个C ++字符串。
如果你想实际比较一个字符串的第一个字符,那么。
if ((*iter)[0] == 'a')
会做到这一点。
如果您确实需要const char *
,则可以使用:
p = iter->c_str();
但请注意,这是一个CONSTANT字符串,您不应该修改它。
答案 6 :(得分:1)
您也可以使用STL算法。 如果你可以使用C ++ 11:
bool set_condition(const char c, const set<string>& s)
{
auto position =
find_if(s.cbegin(), s.cend(), [c](const string& s) { return s[0] == c; } );
return (position != s.cend() );
}
答案 7 :(得分:-1)
尝试将char包装在std:string:
的实例中std:string comp(characterForComparison);
和
使用[0]
检索第一个字符