不能在单词中找到相同的字母

时间:2013-12-12 09:18:09

标签: c++

有人可以解释如何在单词中找到相同的字母吗?

有代码,但它的整个单词都是相同的字母

int Sting::SameLetters(string word, string sk) {
    string find; 
    find = word;    

    for (int i = 0; i < word.length(); i++)
    {
        if ((find.find(tolower(word[i])) == string::npos) && 
            (sk.find(word[i]) == string::npos))
        {
            sk += word[i];
        }
    }
    return sk.length();         
}

所以我试图重新编写代码,现在它的计数字母,但不是全部

  int letters(string word, string sk)
  {
sk = word[0];
int lenght = 0; 
for ( int i =0; i <= word.length(); i++)
{
    if(tolower(sk[0]) == tolower(word[i]))
    {
        lenght++;
    }
    sk = word[i];
}
return lenght;
   }

我用过的单词进行测试

  

ssabba ccea

结果

  

ssabba(3)ccea(2)   我必须得到ssabba(6)

2 个答案:

答案 0 :(得分:1)

暂时考虑if语句的逻辑。

您将find初始化为与word相同,所以当您这样做时

find.find(tolower(word[i])) == string::npos

它确实会找到该字符,表达式将为false。并且由于该表达式是错误的,由于逻辑和运算符&&的短路特性,第二次检查不会发生。这意味着sk += word[i]语句永远不会发生,您将返回未修改sk的长度。

我不确定你要做什么,但这种情况绝对不是你认为它做的。

答案 1 :(得分:0)

请查看std::string::find参考。此函数将搜索整个字符串中的第一个匹配项。你正在迭代所有的字符,所以你可能只想逐个字符地比较来估计特定字符的出现次数?假设您的参数skstd::string且{1}}正好为1,您可以这样做:

.length()

这将始终返回发生的次数。即。

size_t sameLetters(const std::string& word, const std::string& sk) {
  size_t length = 0;   
  for (size_t i = 0; i < word.length(); i++){
    if(tolower(word[i]) == tolower(sk[0]))
      length++;
  }
  return length;
}

如果你试图完成不同的事情,请详细说明。