2

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

4

8 回答 8

5

比较std::stringjust do 的第一个字符:

if (!(*iter).empty() && 
    (*iter)[0] == characterForComparison)
{
}

要访问字符串中的第一个元素,字符串提供operator[],front()或用于begin获取对第一个元素的引用。见std::string页面。

于 2013-09-02T11:36:01.150 回答
2

由于您的集合包含std::strings,因此取消引用迭代器会给您一个string,而不是它的第一个字符。改用运算符[]

p = (*iter)[0];
于 2013-09-02T11:35:14.760 回答
2

*iter是一个字符串,试试

char p;
//...
p = (*iter)[0]
于 2013-09-02T11:35:15.627 回答
2

你有两个问题。第一个是您尝试将std::string对象分配给char*. 第二个是如果你想要第一个字符,那么p应该声明为一个字符而不是一个指向字符的指针。

当然,实际上没有必要将字符存储在像这样的临时变量p中,至少在像你这样的简单情况下不需要。直接从字符串中使用它

if ((*iter)[0] == characterForComparison) { /* do something */ }
于 2013-09-02T11:36:41.760 回答
2

如果你可以使用 C++11:

for(auto s : myset)
{
  if(s[0] == characterForComparison)
  {
     return 0;
  }
}
于 2013-09-02T12:27:10.020 回答
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() ); 
}
于 2013-09-02T12:03:34.867 回答
1

C++ 字符串不能转换为 C 风格的字符串。*iter给你一个 C++ 字符串。

如果你想实际比较一个字符串的第一个字符,那么。

if ((*iter)[0] == 'a')

会成功的。

如果你真的需要 a const char *,你可以使用:

p = iter->c_str();

但是请注意,这是一个 CONSTANT 字符串,您不应修改它。

于 2013-09-02T11:36:31.990 回答
-1

尝试将 char 包装在 std:string 的实例中:

std:string comp(characterForComparison);

用 [0] 检索第一个字符

于 2013-09-02T11:36:24.243 回答