有人可以解释如何在单词中找到相同的字母吗?
有代码,但它的整个单词都是相同的字母
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)
答案 0 :(得分:1)
暂时考虑if
语句的逻辑。
您将find
初始化为与word
相同,所以当您这样做时
find.find(tolower(word[i])) == string::npos
它确实会找到该字符,表达式将为false。并且由于该表达式是错误的,由于逻辑和运算符&&
的短路特性,第二次检查不会发生。这意味着sk += word[i]
语句永远不会发生,您将返回未修改sk
的长度。
我不确定你要做什么,但这种情况绝对不是你认为它做的。
答案 1 :(得分:0)
请查看std::string::find
参考。此函数将搜索整个字符串中的第一个匹配项。你正在迭代所有的字符,所以你可能只想逐个字符地比较来估计特定字符的出现次数?假设您的参数sk
是std::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;
}
如果你试图完成不同的事情,请详细说明。