访问set c ++中字符串的第一个字母

时间:2013-09-02 11:33:18

标签: c++ string iterator set

我有一组字符串,我需要访问每个字符串并将字符串的第一个字母与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;

8 个答案:

答案 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]

检索第一个字符