有一些解答存在缺陷
2015-11-06
练习 5.21 代码有缺陷。比如使用 hello Man big Man error 这样的字符串,它认为 Man 连续出现了两次,实际上 Man 和 Man 之间有个 big。
#include <iostream>
#include <string>
using namespace std;
int main(int argc, char const *argv[])
{
string currString, preString;
bool bl = true;
cout << "Enter a set of strings: " << endl;
while (cin >> currString) {
if (!isupper(currString[0]))
continue;
if (currString == preString) {
bl = false;
cout << "The repeat string is: " << currString << endl;
break;
}
preString = currString;
}
if (bl)
cout << "There is no repeat string." << endl;
return 0;
}
为了配合书中刚讲的内容而使用 continue,结果导致代码不严密,像上面那个字符串就是例子。改成下面这个形式应该就可以了:
#include <iostream>
#include <string>
using namespace std;
int main(int argc, char const *argv[])
{
string currString, preString;
bool bl = true;
cout << "Enter a set of strings: " << endl;
while (cin >> currString) {
if (currString == preString && isupper(currString[0])) {
bl = false;
cout << "The repeat string is: " << currString << endl;
break;
}
preString = currString;
}
if (bl)
cout << "There is no repeat string." << endl;
return 0;
}