我尝试使用字符串编写程序来确定文件中的单词是否连续有两个相同的字母。我写了一个函数:
bool likeornot(apstring word)
{
for (int i = 0; i < word.length(); i++)
{
if (toupper(word[i]) != toupper(word[i + 1]))
return false;
}
return true;
}
主要代码:
while(!fin.eof())
{
fin >> word;
if (likeornot(word))
cout << "I like " << word << "." << endl;
else
cout << "I don't like " << word << "." << endl;
}
fin.close();
这总是假的,并告诉我它不喜欢任何一个词,如果有人会帮我弄清楚为什么那么棒。
答案 0 :(得分:1)
更改
for (int i = 0; i < word.length(); i++)
{
if (toupper(word[i]) != toupper(word[i + 1]))
return false;
}
到
for (int i = 0; i < word.length() - 1; i++)
{
if (toupper(word[i]) != toupper(word[i + 1]))
return false;
}
你在循环中的最后一次比较中走出字符串。
答案 1 :(得分:1)
更像是
for (int i = 0; i < word.length() - 1; i++)
{
if (toupper(word[i]) == toupper(word[i + 1]))
return true;
}
return false;
答案 2 :(得分:0)
你的循环需要以word.length() - 1结束,而不是使用此版本的word.length(),你总是将单词的最后一个字符与字符串最后一个字符进行比较,可能是一个空终止符。
答案 3 :(得分:0)
你正在阅读字符串的结尾,但由于这个错误,你不太可能走得那么远:
if (toupper(word[i]) != toupper(word[i + 1]))
return false;
如果前两个字母不一致,则该函数返回false
。